设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 : j! S" Y$ w: G7 u& f+ C
    / e$ g5 `! v8 v$ B+ U/ j/ K; W& f
    为预防老年痴呆,时不时学点新东东玩一玩。3 s& C+ ^  W. E$ c  K
    Pytorch 下面的代码做最简单的一元线性回归:5 W! I" ?) [+ o  W" |. U' m! E
    ----------------------------------------------2 `( j. d& X3 X
    import torch( c( l/ Y7 o2 |
    import numpy as np
    ' F5 w8 \: J5 e+ c/ [  |import matplotlib.pyplot as plt- p+ O. Z: t: R0 C3 }5 ]9 \& x& V
    import random6 _2 i! b; x; F- U7 Y
    % m2 q! f4 l+ r; P
    x = torch.tensor(np.arange(1,100,1))1 m( E. W. W. H0 `# R3 ^3 O+ P  Z# a
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15* l8 j5 n5 X3 H

    - m6 A9 H. e# K- Lw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b! X: j9 w( }' g" H7 C# {
    b = torch.tensor(0.,requires_grad=True)9 p3 @* z# _1 z8 g" N0 A* }

    $ k9 W& z* S/ _9 Z/ D- u  d# B* A8 Aepochs = 100: _) T; }% g/ D7 h2 l

    & A; c& m. m; _' b3 qlosses = []. Z8 L0 E0 ?/ e
    for i in range(epochs):, ^, b* ]# Y1 J6 J7 k  S
      y_pred = (x*w+b)    # 预测
    8 @4 k& ^$ u+ @8 w6 w7 F% Z  y_pred.reshape(-1)% k# l7 R0 {7 d* g) Z# B2 `

    2 r1 a4 t6 v) }+ q1 G  loss = torch.square(y_pred - y).mean()   #计算 loss
    2 j3 n( U8 i- V2 P7 s8 f  e  losses.append(loss)3 l, S4 ~+ ~: q6 K
      / L3 _, X7 J8 r9 S5 N
      loss.backward() # autograd: B* z# Z4 }  a& ?  a
      with torch.no_grad():3 y' Q6 g4 u" g' Z. F
        w  -= w.grad*0.0001   # 回归 w
    - C5 h: `; ^) Z& d    b  -= b.grad*0.0001    # 回归 b
    0 x' }7 Q  u. A) B( X, e  w.grad.zero_()  # B& S5 ]7 u' {" A7 F9 m& h& o- {
      b.grad.zero_()
    ( H4 l8 e: K& M5 @1 l5 I0 u, y! h/ ]
    print(w.item(),b.item()) #结果
    4 k( {- A- ?; s" j6 ], ^4 o
      l7 m$ {7 p' }Output: 27.26387596130371  0.4974517822265625
    / V$ A- E  h6 t& n4 K* w----------------------------------------------
    ! C4 d! X; d' J% }2 \2 N( C最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。7 Q+ ~4 f# _  v3 E# v6 p" I$ k; h: m
    高手们帮看看是神马原因?& O# a3 h2 M, @% K: r4 ], z; v8 j

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 8 Q+ x: u. I9 x9 f' b( |

    ) t& z. s) c6 H- M' j- v- U+ {没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?. |2 x5 R( s% t1 L3 n
    -------
    / f4 y' @2 A7 S. V% A* U# h不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ) A' i  q0 K- X  c2 R-------) |# p& p. h' M: ]
    算法诊断部分,建议把循环次数改为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: a( L1 E" z5 |
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?! m- _8 d- z! n' q) g
    -------
    1 B3 b/ U2 {3 n3 C* ?8 z7 K" C不好意思, ...
    1 o7 o( b! r: M
    谢谢,算法应该没问题,就是最简单的线性回归。) u2 ^, b$ u1 ]% z5 P- j" I9 }- n
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 * \) r6 E* J) H. A; r
    雷达 发表于 2023-2-14 21:52
    - I) Y: c% @' O4 ~+ [谢谢,算法应该没问题,就是最简单的线性回归。1 U% R4 u" I# }/ w6 ~
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    ' S1 J- _7 R7 c2 @6 `$ s' t  p) }
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。) Q% X* b+ E, q8 N. Y

    , g% s# b/ N) g; |) F3 u7 U或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 - G+ @) t! J" b; r+ y1 O0 ]1 v
    老福 发表于 2023-2-14 22:00
    6 x5 R9 A7 u) b% P( A' _* s刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    , \7 A% |  C0 H8 T3 z3 o
    6 j2 P% l7 M: [或者把b但的起点改为1试试。 ...
    : w; ~+ x0 U) }8 q% B1 w% o
    & {6 }3 p  u9 @. _: B, V. B/ w: X% y1 M
    你是对的。/ Z3 M# C  f: Q, U
    去掉了随机部分; c$ a2 u- \0 r3 q3 u/ I
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    / p% ]7 @" |. j; R. C1 h% t: t6 Vy = (x*27+15).reshape(-1)
    ( r. \* [/ E1 ?
    3 G( D8 X$ E' u7 W0 Q循环次数加成10倍,就看到 b 收敛了" ~8 K1 L3 _7 {) t! m8 M3 O. P
    w , b9 ~5 {) M6 h3 O$ i* W- W& D# N: B
    27.002620697021484 14.826167106628418' c9 k. f7 b6 _: S, A
    + W0 j9 |# b9 m8 P8 [$ R
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-21 17:50 , Processed in 0.057142 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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