设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    / |9 x4 A3 d. S6 i
    / M  s, Z) G6 k# T为预防老年痴呆,时不时学点新东东玩一玩。( G7 }: O0 c, N# m
    Pytorch 下面的代码做最简单的一元线性回归:" d' {5 k5 P# a$ M1 _
    ----------------------------------------------
    $ M" v& _  L1 d  A" u5 j+ yimport torch
    - ^' h' j# n+ ?( {" Eimport numpy as np
    1 W2 m7 ~4 H' j' v5 nimport matplotlib.pyplot as plt7 q9 I0 G$ M" M  p& M5 m
    import random
    ! ?9 y7 e/ d6 J$ r' w1 I& o" L* `: W% d* y
    x = torch.tensor(np.arange(1,100,1))
    $ p- U+ S) g' O# Q4 g# D/ G4 fy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15$ y2 D5 w4 X& M
    1 L2 M5 _/ q/ U  J3 u9 p( v
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b: S( V/ R) r' r. j. Z  ^' p8 Y" C
    b = torch.tensor(0.,requires_grad=True)
    & X4 r1 D6 m" U4 U  c
    . p7 D7 n& J- `* vepochs = 100( q" H" J! Z/ O7 g: Z0 ?4 P8 O* z
    & e! c% Z" d! G$ u6 Q" a9 B
    losses = []
    ; y- W( b1 t, @7 x" F( pfor i in range(epochs):1 f  E+ y7 T7 J$ N2 P+ |
      y_pred = (x*w+b)    # 预测  _( W! O2 \/ a: f  _$ g6 q
      y_pred.reshape(-1)
    0 a6 r. |' [! }. M
    " B0 |. q4 e7 D! A6 p5 l  loss = torch.square(y_pred - y).mean()   #计算 loss- n' L0 ^" x" Z
      losses.append(loss)! h+ t# u$ g8 f$ K& x
      
    4 \: Q3 z5 l, \1 F5 i  loss.backward() # autograd
    + K- n) R& r+ j7 l6 k, p  with torch.no_grad():  N) H% o( C1 ~: b* _$ f% x) J
        w  -= w.grad*0.0001   # 回归 w
    ( k( T0 u+ y0 E) i    b  -= b.grad*0.0001    # 回归 b * e: x6 |6 C$ W: d: d1 H
      w.grad.zero_()  6 U; T0 G. _% o, c" h4 a2 w
      b.grad.zero_()
    1 |0 T0 p3 R, f5 B5 j4 U* r5 s) F- g
    print(w.item(),b.item()) #结果6 q. C' P; |4 w7 J: A
    : K5 P8 }! y+ q) y" Q3 }% V
    Output: 27.26387596130371  0.4974517822265625
    + k2 E; E* t5 ?2 y" u----------------------------------------------8 |" N' E; W  w3 a6 E
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。3 q, F) a3 p& K( ~
    高手们帮看看是神马原因?
    1 [6 [7 S/ N( M6 M

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 & f) K4 C: }4 L2 |3 y6 O

    5 M7 a  @* m% x  s: W. e( k没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?+ k" g3 w2 I' Y, o9 W
    -------
    3 F5 Z5 o& e& U, a! u+ x( L7 o不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    - a( C/ S( L# t) r-------
    6 n# O. Z) n2 A/ v算法诊断部分,建议把循环次数改为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. X  }7 R' j% _% ^; ~& N3 p" f+ O
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ; M4 }# U) f, l% e. {' Y1 a, h-------
    6 Y* f0 J0 }  @* m' c% ~2 ?1 l不好意思, ...

    5 h- c3 ~, e5 N% o* z+ Y  ~8 I. {: H谢谢,算法应该没问题,就是最简单的线性回归。
    # \8 ?6 x# K/ I我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    : R; x2 D* c0 M
    雷达 发表于 2023-2-14 21:527 W+ M0 ^, F5 n7 m: B
    谢谢,算法应该没问题,就是最简单的线性回归。- X1 x) i2 z7 ]: B' _! h% Q
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    1 h' j) l5 a; d& q6 L6 P1 F4 b: t: s3 R* X9 Z) H
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。9 I" Z1 k1 S4 f+ b5 b8 M8 i4 z; t& s

    , K5 [; |4 q6 e% z' f或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    / b0 X, i4 F) N* v& V4 d6 X
    老福 发表于 2023-2-14 22:004 l  |3 ^! p+ T# k, C8 R" p
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。' A& |7 r/ G+ k& c7 B- p

    1 B+ x/ m/ _1 ?# W或者把b但的起点改为1试试。 ...
    2 B4 N# \, M" ]% b" N8 B

    $ w9 ^* ~+ U2 m( P你是对的。
    : [: G; V- q4 }, h- Q8 T去掉了随机部分$ H% w. P6 w& X8 M( @6 i! p& Y1 T
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    6 L" f2 v  P8 r6 Yy = (x*27+15).reshape(-1)
    : ]$ k  o- \4 u; ^4 t6 y; i, B1 L- W1 c- T" j! r* Z
    循环次数加成10倍,就看到 b 收敛了
    & K0 H2 P! N, I& j8 X$ \w , b
    * M! h' o! b& S: K, |27.002620697021484 14.826167106628418
    ! r. e" C! j- R
    & v( Q3 b, t5 {9 {5 F+ T和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-13 06:01 , Processed in 0.057024 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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