设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    & s$ I  I' i9 _3 q; {
      `! N7 f, b9 ?为预防老年痴呆,时不时学点新东东玩一玩。+ n/ m0 v1 ^; n+ T
    Pytorch 下面的代码做最简单的一元线性回归:
    - w2 V- O* v, B* P2 C4 P' ~5 y----------------------------------------------4 i$ I* q' B  r- i9 w% @2 K
    import torch
    / b4 h/ J+ [& Q) j7 i" ]import numpy as np5 A+ h9 g( e+ [9 P
    import matplotlib.pyplot as plt/ K- p: y) h; K& O: t1 H9 m$ P
    import random$ |* C8 }7 ]* m. {+ N& t% r. ^- L

    / @+ ?; I8 j' ]+ i" c- c" Zx = torch.tensor(np.arange(1,100,1))+ v. j& l  A" R( _" V9 }1 I
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15( \% ?) K- P# ~

    : h7 I5 Z/ r3 y. W5 @  _# W) M7 Uw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    6 W3 Y" e- G" |0 ]1 qb = torch.tensor(0.,requires_grad=True)
    & ~- I. g* T2 j  R, k) I9 w, l( h: K$ k/ R' H
    epochs = 100
    % C. i9 Q$ O4 M$ T7 l5 y- ?; z& N8 u4 T. J0 y' a9 K+ H6 C/ T
    losses = []
    - `7 R  @$ t, a. _0 ?- P5 Zfor i in range(epochs):
    + _8 \; N5 X+ ?! W" q  n% R  y_pred = (x*w+b)    # 预测
    5 F" w$ [& {5 i  y_pred.reshape(-1)
    . A4 ^0 ~( U+ e9 H' b+ G
    $ I/ Y! m6 m/ f4 Z9 O$ `  loss = torch.square(y_pred - y).mean()   #计算 loss% U& [: u& \5 z9 r; L' \* |
      losses.append(loss)' p7 k% U" q1 ?4 |8 _( v
      2 G# f/ ~& |: Q
      loss.backward() # autograd
    6 @1 N" p7 U8 G1 Q  with torch.no_grad():- d9 v% p- c1 ^4 K
        w  -= w.grad*0.0001   # 回归 w
    + G4 }  m8 ~4 D) \; {2 o    b  -= b.grad*0.0001    # 回归 b + P( X) E2 l7 I" |' T1 ^
      w.grad.zero_()  8 n0 \; @5 P7 v
      b.grad.zero_()
    - R- W: i3 ~0 I$ |3 h. n2 T; W$ {; ]! G3 h( H
    print(w.item(),b.item()) #结果
    . ?" H  e$ _7 L. H* f$ }
    , x8 H6 X% d/ @! X+ A0 X" x+ q0 BOutput: 27.26387596130371  0.49745178222656254 z6 ?, j6 z0 W
    ----------------------------------------------
    & ~7 l/ o- D* y最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ! O3 A1 m) K% g高手们帮看看是神马原因?4 G5 D- g8 z, F) g0 ~

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 0 k6 h2 C) ?  O8 r" X: i

    ( b# H1 ^$ y: ?' ?, u  ]没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?3 p. R8 g) }' j* @8 P
    -------
    ) N2 _) E7 ~2 r8 ^. B2 J4 O不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    $ k/ [$ }5 x) |& z-------6 ]- C# ]# L! C+ d/ V9 ~3 O% j
    算法诊断部分,建议把循环次数改为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
      k) {( K8 V  m没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?4 u0 `& c! b# ~) o+ }; S
    -------: d8 y3 ?) s& b7 b" {; m& S
    不好意思, ...
    2 C0 C0 V" u2 ~
    谢谢,算法应该没问题,就是最简单的线性回归。8 g& [' M: C# W* D& Y$ v* z
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    3 c1 O1 I' |* K
    雷达 发表于 2023-2-14 21:52& w6 U& G' e& o) C9 M0 s! g
    谢谢,算法应该没问题,就是最简单的线性回归。
    , {! Y/ [3 c- J, Z3 M我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    5 w- z7 _: L0 o9 \1 D* @6 f
    4 K! k3 w7 {8 S% S
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。2 `8 P( {/ J( O% k  i  `1 v
    ! i% Z1 f! ~' |, t/ Q
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    , l8 b8 L7 d. @
    老福 发表于 2023-2-14 22:00
    4 F3 \/ L: {4 c8 d刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。$ r$ o+ P- c; t- }/ g7 ~

    6 o3 ], ~1 `- F) n0 z: f或者把b但的起点改为1试试。 ...

    6 {; j  }& Q3 G
    5 {, D9 }' r6 N" u/ N- p/ r# |5 h你是对的。
    + P% Y4 d8 G3 P; a/ a0 Q/ F去掉了随机部分# f' d: M6 E4 R; P7 T
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)! f/ W* r3 j2 F3 c/ J
    y = (x*27+15).reshape(-1)
    ! X* C* _1 N0 }/ R9 [( b5 N7 Q
    # X; T* D: q+ f5 Q  Z: r循环次数加成10倍,就看到 b 收敛了" \3 P+ k6 n5 F* g
    w , b
    ! M8 w( `8 i5 c7 R: l1 N9 T7 f27.002620697021484 14.826167106628418
    4 b/ x1 S" H+ r' X% _6 ]$ Q' `% m# P, E3 D1 Z
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-10-14 05:09 , Processed in 0.089122 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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