设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    ; I7 J/ p- P+ d7 e+ c3 X
    0 j$ _9 ?& m# ?  {; C为预防老年痴呆,时不时学点新东东玩一玩。
    . \- ~1 Y& a" Q+ J* K! P( e$ {Pytorch 下面的代码做最简单的一元线性回归:- O9 q* |; P5 D( h& h) Q) `' h, G; f
    ----------------------------------------------
    7 b3 M; S* R! E. J1 Jimport torch
    6 o; J+ K1 i, l+ }import numpy as np
    # k3 C. \! L5 p' t& ~import matplotlib.pyplot as plt- y! `1 u  R" r" y2 o9 A8 t
    import random
    6 u- s# g* Z6 O4 a
    , P6 B9 U; G, ]x = torch.tensor(np.arange(1,100,1))" \' H' e/ Y  v
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=155 M' @# S+ O- J
      x, u/ s! h1 r6 a+ W
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b  p3 X2 c# m* l4 w4 L
    b = torch.tensor(0.,requires_grad=True)
    2 c. [6 S- Q# O6 `
    5 p. c" L& z/ Y9 e& Y- Wepochs = 100! j8 G1 T/ r9 G  C
    + R, C3 {  `! r. g7 J
    losses = []# N( l2 Q2 K# H! \: {
    for i in range(epochs):
    9 ~; O0 \+ h  P& }% r  y_pred = (x*w+b)    # 预测
    + h. c% u; O. C# m; M  y_pred.reshape(-1)
    $ S# A, c  b- }
    ' o9 F) a/ A+ |  loss = torch.square(y_pred - y).mean()   #计算 loss( _# T6 G% `; i$ v2 _  I
      losses.append(loss)2 c6 {' M$ ?5 u# c, t) C4 `
      
    - @/ z. r1 f( @2 n; M  loss.backward() # autograd
    8 ?. H! V) l% t  with torch.no_grad():3 A6 N! }2 W7 u. ~) d0 X8 }
        w  -= w.grad*0.0001   # 回归 w7 Q1 a# }2 J, `1 w# `8 q7 U
        b  -= b.grad*0.0001    # 回归 b
    8 G9 P  q3 j' V! a0 w  w.grad.zero_()  7 n6 H' E: P4 ^. h( {% ~
      b.grad.zero_()# {5 p' X1 |/ x1 J' H3 `2 P

    * ~  \4 h- n# V/ dprint(w.item(),b.item()) #结果! O  n) h9 \$ Y8 F3 a/ P9 x

    & z3 d2 k% M! s- EOutput: 27.26387596130371  0.4974517822265625; U4 T  M* w7 v0 I# A5 M( r$ e
    ----------------------------------------------
    : ~" k. z: p: }3 c% V! @最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。0 X  c3 Y' b) y
    高手们帮看看是神马原因?# f$ ^! L: f* X

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑   a9 e8 ]( w6 e3 w1 w2 `4 h
    : x. w; G9 J6 p! e( _) X
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    % J0 m( j  Q8 }( ^* I  X# B-------
    , A+ _9 j  Z; H3 R3 Q. F不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。8 x& g& Y7 r! ]6 l8 P6 C# W3 A# J
    -------% A: x# \, F% Z9 t
    算法诊断部分,建议把循环次数改为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
    . h+ V. i; O4 ^. D没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?! V0 z+ N9 X& s, g6 Q4 v: ]
    -------
    6 q! Y8 ^+ r" H  ~) D$ Y不好意思, ...

    + `8 R1 m: x4 S4 C/ ^3 ~& P" x谢谢,算法应该没问题,就是最简单的线性回归。, O& U  t; [0 h& p+ U: ]: B
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    1 M# o& a( H, S" J, M
    雷达 发表于 2023-2-14 21:52
    . Z/ I' D7 l, b谢谢,算法应该没问题,就是最简单的线性回归。
    ! [4 E- t9 R' q+ K* s. [# P我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    " E0 ^, A  A1 y$ ]7 J8 {6 }- ?; }/ n# `, U5 A5 R0 [8 @8 W5 w
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    , b1 r- N/ R0 |& G/ Q$ Q
    / \9 Y# q4 [: V9 r! M或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 4 ]1 ]+ F& A4 w) O- A  C
    老福 发表于 2023-2-14 22:00& O& b( _' h' Q! l$ D% j" N. ~
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, O8 S, h5 C8 X' H. r/ G7 ^7 `

    1 z) m* ~6 U% R) i9 a5 J4 u或者把b但的起点改为1试试。 ...
    4 ]. a. @1 T0 M
    " \3 F; f* E( I/ I/ V) N
    你是对的。' E: D; _. m% M; g+ G; K
    去掉了随机部分  r2 e! Q8 l  V" [5 g, N
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)  g" x' N( q- S/ ]+ O" y" j
    y = (x*27+15).reshape(-1)
    0 l2 J9 ?0 ~% O$ L
    & r1 U' J$ V' |# m6 I4 V循环次数加成10倍,就看到 b 收敛了" [# q5 _* C& L
    w , b% y% j! R7 R0 Z  e  e0 K
    27.002620697021484 14.826167106628418
    8 t% n% D0 P8 y; v8 I6 V0 P7 d: A
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-14 10:54 , Processed in 0.055612 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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