设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 8 h1 E- {% {1 f0 z! x
    : O$ H7 Q1 ?; l
    为预防老年痴呆,时不时学点新东东玩一玩。
    $ q4 A1 a- u" |9 u& X8 B1 XPytorch 下面的代码做最简单的一元线性回归:
    ; g3 d' H( {' o8 z5 `----------------------------------------------
    - u9 R/ d/ X1 x, }! q" x7 k$ pimport torch. H8 g+ C3 w: t8 {3 m% A
    import numpy as np1 s) y  p8 T% Q( Y
    import matplotlib.pyplot as plt  U% j2 ]7 U& b1 ?1 E6 ^
    import random- T: g" U% A9 `( Q- H4 b
    . S& Z+ j1 T5 d$ z+ K3 [9 R! g
    x = torch.tensor(np.arange(1,100,1))
    % A' ~! t3 [; l/ y' J  |0 Fy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=153 M6 I1 q7 T: T) m( o  G

    # D9 J! n, D% u8 P8 j! z) uw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b! l, @1 _* ]7 y: \- i
    b = torch.tensor(0.,requires_grad=True)
    6 R# h, X- U! {: b! u$ _0 w7 i8 S" y  q* w" X0 D) }
    epochs = 100
    4 [- E# ~( G  l. c- r& T6 m% b
    ) R: o4 U& v; X% C3 Klosses = []
    ( o4 m& z8 v3 `, l; \( v% ], Ofor i in range(epochs):4 S+ t3 _3 ^3 d; E) ?
      y_pred = (x*w+b)    # 预测) @( y& s6 P# x& @
      y_pred.reshape(-1)
    3 C- Y! g2 g( K6 l
    ) R7 ~% I5 d* H; z' w5 x# I1 |9 V3 _6 r  loss = torch.square(y_pred - y).mean()   #计算 loss
    ) C) o9 j* Z) u/ E- N: D& w  I  losses.append(loss)+ Z! Y7 W: v5 @- x
      
    , `) a+ D& M* h( p, {3 |! p: h0 X  loss.backward() # autograd0 ^  \- c2 m) Q/ r/ B: c
      with torch.no_grad():
    9 |. U) t- d, Z; V& _8 N" Z    w  -= w.grad*0.0001   # 回归 w) e. L& k& [5 s7 m' X2 C6 I- W
        b  -= b.grad*0.0001    # 回归 b * g% n8 ?5 u+ C8 `$ @
      w.grad.zero_()  
    & d& o1 G3 D% V' G* Q5 c$ f0 X  b.grad.zero_()# O. D5 w' E% c  N) _+ e
    - \9 D' K, C/ {# n6 Q
    print(w.item(),b.item()) #结果
    * Y5 y" L* d% H- v2 p% [! `# [, i4 M+ U
    Output: 27.26387596130371  0.4974517822265625) A# N8 W1 L+ v7 i* b& b4 M+ h
    ----------------------------------------------
      ?, j: w8 ]! Y% E* n; s最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。8 F" j  N1 |3 P8 x
    高手们帮看看是神马原因?
    1 X' h2 M. U9 K& ~  \

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    0 x& y+ \6 K; n% @, r5 _
      I! R- E4 ?. ?. R& O% \0 s; Y- I没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ! h3 z' ]" U  ]6 v8 W-------
    ! P0 g! e2 G4 G( y" c& g不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    / j. _6 z4 y! M, y- _-------
    5 e# P, `2 Z7 o7 `0 S! j$ t2 d算法诊断部分,建议把循环次数改为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:239 |+ x6 u9 d9 A( I! y: A/ R7 c
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ( e$ L* J' K$ M8 }/ ?: [0 x* M! j  N-------
    ' Y  I: w) A% h: G8 I& x0 K不好意思, ...
    ! |0 d8 ^; b7 X/ P- g" O
    谢谢,算法应该没问题,就是最简单的线性回归。& |0 n1 j8 Y. w# J2 _) J9 [2 {$ F
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 & [4 J7 W! K0 s! G; G
    雷达 发表于 2023-2-14 21:52* m  ]% ^3 D; O& B# {3 i% }3 w
    谢谢,算法应该没问题,就是最简单的线性回归。
    4 J$ P5 Q7 c3 ^# r8 |我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    2 b; F5 A" ^5 C/ V+ o# O% J/ _+ R7 M% X
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。; P6 S3 k! E2 O, E4 ]& R% R

    # }! D5 c9 r0 a) m5 g- N或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑   D: h  P! r, i  {2 H) \
    老福 发表于 2023-2-14 22:009 z6 _; \5 f7 E& I( z6 b# {) S
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。+ C2 k+ E% m  Y# X( C# q

    4 [/ M3 u4 G, `) q* ]1 U3 }  N; u或者把b但的起点改为1试试。 ...
    4 b4 X5 Y1 a4 j, y7 s
    ) W% W: \3 X) w: P! v
    你是对的。0 y/ W8 |0 }8 z8 J1 H( {; y- Z
    去掉了随机部分
    . Q+ `! v( Q# c1 I#y = (x*27+15+random.randint(-2,3)).reshape(-1)& L9 R$ y4 O  K9 [- d- y
    y = (x*27+15).reshape(-1)- B+ y) l3 X( U: x7 u

    9 W5 A$ C$ c9 p* F$ Q4 _/ i3 [. h循环次数加成10倍,就看到 b 收敛了# A6 ^! `: p& Y+ C
    w , b
    0 i# O5 [: t4 G/ ^5 H9 R27.002620697021484 14.8261671066284181 @4 k  S' f: T7 I7 q2 a: M
    * q% @1 y% R5 |
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-21 03:41 , Processed in 0.072750 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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