设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 2250|回复: 4
打印 上一主题 下一主题

[信息技术] 继续请教问题:关于 Pytorch 的 Autograd

[复制链接]
  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ; T* ]( a/ e+ N3 p7 Q

    ( }. |. s0 q9 r为预防老年痴呆,时不时学点新东东玩一玩。
    : s5 }$ }+ g- u3 ~6 @! A4 E, w) k2 ^Pytorch 下面的代码做最简单的一元线性回归:+ w, b3 q0 t7 P) P# U/ Y, v8 T
    ----------------------------------------------
      ]0 S1 Y- U# k, u7 v6 D) c2 yimport torch# q& o+ y" T2 Q+ _& w1 ~$ s; s, C
    import numpy as np0 j8 ?: V& N7 ~- p. `5 |/ K3 W: Q
    import matplotlib.pyplot as plt
    0 p5 r7 U- _  q; K+ a( `import random( d' E: v& w& Y& m2 H
    & ^5 X( i# W6 F. {0 ~
    x = torch.tensor(np.arange(1,100,1)); S0 l. i9 f% J/ D7 t
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=153 Q# \2 p% s* j  i; |6 n  w; q
    - k* `1 P) Q, H. {5 y, f
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
      U6 u( u( }- V& }b = torch.tensor(0.,requires_grad=True)5 }* A! U: ~/ M" `5 r4 x
    , Z! q* x" S9 ]
    epochs = 1004 [3 u  [+ s! {
    - c0 s! X' }  H  D7 {6 ^
    losses = []# F, p) u$ c# r. X2 d  \# j
    for i in range(epochs):
    ! `6 r- c: E5 J* S% r  y_pred = (x*w+b)    # 预测
    , n# e9 w9 v. A* t* i0 W! `1 ~  y_pred.reshape(-1)
    : d% M% y0 f" x2 e9 ^% Z) ^
      R" D" O' ~. G  loss = torch.square(y_pred - y).mean()   #计算 loss8 g5 b% ]- Y) W+ y+ r* d4 j) Z8 ~2 V. b
      losses.append(loss)9 X" P+ o  p; Y
      
    ! w: P. S% S% C' k& z  loss.backward() # autograd- }* C2 I& X. `! i/ Y6 q
      with torch.no_grad():
    7 j) s8 Z) W' z8 r5 i: }6 P    w  -= w.grad*0.0001   # 回归 w
    1 D, b: I* p# O9 c    b  -= b.grad*0.0001    # 回归 b % K. a; f5 k0 s; P
      w.grad.zero_()  
    : E0 G! d; o! k0 H! ^* O/ V4 s  b.grad.zero_()
    ; J+ g) ?  P& @' s% W$ o5 l
    ( r, z' e$ V/ a8 y; m0 `+ E2 r7 yprint(w.item(),b.item()) #结果
    ( z* q1 z; P) j. s
    : x# w" k3 H( X( Y  r! VOutput: 27.26387596130371  0.4974517822265625' o  J. G8 [2 A; F
    ----------------------------------------------
    1 R# F' x8 H6 L最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。& D. {% t: U- b4 {% P$ m
    高手们帮看看是神马原因?
    , W! \2 n1 H  e

    评分

    参与人数 1爱元 +10 收起 理由
    老票 + 10 不明觉厉

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ! g' G% H* e) A& Z

    ' F  M" F2 M1 X3 y$ ?没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?4 ^5 X( y0 R  G# r0 q
    -------! A& D# y  Z( e- e5 i
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ; a2 g, q' _; C  O! @-------
    ; R% J1 U' _" ^* y算法诊断部分,建议把循环次数改为1000, 再看看loss是不是收敛。有点怀疑你循环次数不够,因为你起点是0, 步长很小。只是直观建议。

    评分

    参与人数 1爱元 +10 收起 理由
    雷达 + 10 谢谢建议

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    板凳
     楼主| 发表于 2023-2-14 21:52:57 | 只看该作者
    老福 发表于 2023-2-14 19:23" M6 F# B; {% }& y
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?" u( B+ c8 v# g
    -------
    9 r4 G4 s* S. r0 E不好意思, ...

    3 ~4 o3 I  Z: p# t" ~- K( s谢谢,算法应该没问题,就是最简单的线性回归。
    ) @, `2 ^" a$ G3 l$ B我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    " I% a% d# F: d+ B9 H
    雷达 发表于 2023-2-14 21:52+ L: L# m+ Z/ T) ?. p! r( h- t0 y+ G
    谢谢,算法应该没问题,就是最简单的线性回归。
    * {. y' E7 z/ }  Q, x/ U我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    7 ?. u* B# n3 w1 \& E$ H

    - f. r1 P8 U$ G: m刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。8 `5 Z8 S4 t: _; {
    8 U4 ]/ v7 i( T; s, V$ y' |( ]
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    2 q) b; R# ]2 V& P, Q' x: ?3 z9 O! _
    老福 发表于 2023-2-14 22:005 g' A" P& _/ T: e
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. D7 q7 \: ^, p8 u

    5 \. N1 Z0 }: |& X5 c& B  Y$ l或者把b但的起点改为1试试。 ...

    / v+ _1 }" ^9 L& J8 u$ X& H" p: c8 E& ?5 r7 f8 c0 |6 \3 q1 E' r8 g  b
    你是对的。0 e! g0 t8 F- @
    去掉了随机部分! R' H* I' F: ?+ x& e
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    - s( W$ m- b" D7 p4 @7 ?y = (x*27+15).reshape(-1)
    ) U3 @. v& N9 s9 L% c6 X- _" H: ]; j: Y# w  S  p$ p
    循环次数加成10倍,就看到 b 收敛了
    7 T+ b, s4 X0 [- Ww , b/ p  G- y3 M9 A3 J2 e% [0 H
    27.002620697021484 14.8261671066284185 Z7 ^$ |+ k- ?# x

    2 Y: Z0 |2 x+ P' O7 ~6 N' n2 F和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

    手机版|小黑屋|Archiver|网站错误报告|爱吱声   

    GMT+8, 2025-12-24 16:34 , Processed in 0.038619 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表