设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ! j3 |7 Q" S" ~" Q5 j5 {

    ; q4 M6 U) ]' H, i, W. n* I为预防老年痴呆,时不时学点新东东玩一玩。
    / x5 u6 ?& J+ I: X' a' DPytorch 下面的代码做最简单的一元线性回归:
    7 N( v9 m2 Z. H  {1 v----------------------------------------------
    $ S9 u0 S5 ^* l5 z8 Jimport torch5 Y6 Y& i. [8 c$ y/ K
    import numpy as np
    . k, |$ O: {# c# g% ?) d1 I' aimport matplotlib.pyplot as plt% u. F. `6 e$ l8 J: E  c/ r6 x) s
    import random2 _6 v- U( `% F- _: S: U* ]
    ! Z  O1 Q  x7 [% u( h+ X
    x = torch.tensor(np.arange(1,100,1)), z6 j2 F% ]9 M$ \2 ]
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    # b; D8 a4 O2 e3 F6 b+ E* n
    - }/ x' H# L" K# b; f& dw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b7 u3 ~) U6 ?4 r! u! e) v* ?% G
    b = torch.tensor(0.,requires_grad=True)& C7 {3 Q; a: r
      ^4 L+ t( B& E
    epochs = 100
    4 I, d/ }- A' |8 s% u+ a3 \7 @9 O7 P2 M- Y  L: V) t, P# j) Y! l
    losses = []
    - c7 r0 o0 L. l6 W  Q" A9 u# V7 E/ Xfor i in range(epochs):
    5 F# S& X8 V2 ?0 v: K, e  y_pred = (x*w+b)    # 预测2 m9 Y! F& M* y4 D+ F
      y_pred.reshape(-1): r% K$ c6 X5 v0 J  }
    " r* G5 y$ R0 \) Z1 ?7 A
      loss = torch.square(y_pred - y).mean()   #计算 loss
    8 h. m" d8 L! k# }0 O  losses.append(loss)) z. D3 [' O" Z# U5 \* ^
      
    5 X3 ]1 D; ]7 Y- T+ V5 @  loss.backward() # autograd1 r' o6 W- u& L% r# A" @' L
      with torch.no_grad():
    2 @2 P( }4 i+ P    w  -= w.grad*0.0001   # 回归 w
    & d( @, E: U4 s6 e0 j; f    b  -= b.grad*0.0001    # 回归 b 4 D3 ]  P3 {* `# c( g' s
      w.grad.zero_()  7 G4 F/ Y9 w! ?) o$ |" c
      b.grad.zero_()
    ' ?3 m8 B+ ]$ O" x! S( |; d6 n$ a, i& O
    print(w.item(),b.item()) #结果5 c$ E: o0 p# S0 P- }0 D

    " U4 I9 P9 E  s' `& OOutput: 27.26387596130371  0.4974517822265625
    * a2 H4 t8 q4 U% _5 i% H! r8 H# a7 K----------------------------------------------
    % H" T+ c6 U! Q, K+ y2 P最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ; Y) r8 p" p0 ?7 a& p9 J! N: J高手们帮看看是神马原因?7 q' q, V0 l) N) Z, i

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    , ^- x& [, l5 d( @
    0 x: N# ?- T( R2 h: C没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    : ?( N) R/ x6 b, {8 b-------
      }/ G" \. y! L! A& ?, j不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。5 k+ b2 F2 _( W( O0 V5 U
    -------9 ]! K. m) A" |" T( U  a
    算法诊断部分,建议把循环次数改为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:234 n, f, a  d; {6 X  }# F5 E7 o
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?; n' N2 V9 ^; p+ ~: w( G; G
    -------
    . o5 Q5 X: F& `  Y/ {不好意思, ...

    ' P" C! A: M$ H6 W. q( @谢谢,算法应该没问题,就是最简单的线性回归。
      B" s3 o* K9 v7 \) G我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    7 r) d8 I7 ]; M8 R9 g. _/ x# k
    雷达 发表于 2023-2-14 21:52
      F& ?! r( B  p( w. R& I- a. p7 _谢谢,算法应该没问题,就是最简单的线性回归。
    $ T4 u7 _4 J0 U$ s( E3 U0 m我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    6 W: v8 F- R. ~

    + [+ e& C2 G8 ]& Z+ [6 N% V5 g刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    2 C+ Q; V! h" B' h6 g9 l0 k
    0 D) x6 G+ l% }8 K1 P4 j. b* m或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 - j; \1 a# R4 x! c! w
    老福 发表于 2023-2-14 22:002 P" Z. l9 @8 g6 V  L9 g
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。$ L( Q! d' s& j+ R) p; ^+ h
    ; h; D  K/ y& O$ s
    或者把b但的起点改为1试试。 ...
    ! I" p2 B. P7 Q  a, h: k3 M! r4 @

    $ t& ?. @+ y, `- E/ [0 Z你是对的。
    # V. b, }: W3 I( x$ m去掉了随机部分/ Y+ Z9 [& {" u0 H8 K& ?% i* p: y$ @6 g  d
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    0 Z9 F: U+ {3 T, S- U" k3 oy = (x*27+15).reshape(-1)
    4 v/ {; X- x. A) H. f( |  f5 C/ X! e% `
    循环次数加成10倍,就看到 b 收敛了
    ) H- ^9 `  u* c- \& B  \0 aw , b
    . l, L# u" g, R5 ^; Y27.002620697021484 14.826167106628418
    + j8 p0 `: h6 j' Q% E4 \1 \
    4 D) p7 J  N$ q6 O- L$ g3 N和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-28 14:20 , Processed in 0.058442 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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