设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    1 P0 h6 X  t  ]/ `: W/ i
    9 G! U; Z" ~9 ~* k9 N& }为预防老年痴呆,时不时学点新东东玩一玩。
    4 B7 L; V# G$ [% L# C3 S6 e4 SPytorch 下面的代码做最简单的一元线性回归:% R+ V6 F* P. r1 @# T0 h& D/ @6 w
    ----------------------------------------------% R! B+ m; \. @# G
    import torch
    ) M2 j6 V+ z) L2 A, G$ {# Ximport numpy as np- `9 @) n% S  n( T' a' ^. _6 g
    import matplotlib.pyplot as plt0 x2 F: K8 d& R) F
    import random
    9 Y, h1 C7 I. Q9 ^4 E0 f4 Q6 f5 ]2 D( D" A
    x = torch.tensor(np.arange(1,100,1)); h# G; }  g' G$ q8 }
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    8 \. F  n  `0 o9 ?& |* q$ O' v' \% g1 I: z7 K( L" p/ d; K! r& m
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b* D& Z- D3 b# P$ f: u
    b = torch.tensor(0.,requires_grad=True)
    ) M) O* M* f  H! k7 G
    0 L$ @' F' z  @. R" Xepochs = 100
    ( |0 G+ |% r# P6 h% e6 ]
    - e: c6 b4 ^% C2 T" P0 h2 Flosses = []$ F4 P( h& T. ^) E, a
    for i in range(epochs):
    0 D7 Q! m* _0 N! Q! c; y  y_pred = (x*w+b)    # 预测
    ) s% z" j7 X& y  u  y_pred.reshape(-1)
    6 b1 D+ q/ j1 Y* ~0 t) S ! A6 d& m! d/ K6 m$ F- c
      loss = torch.square(y_pred - y).mean()   #计算 loss0 U& Y' J' ]8 U1 D3 c% c1 u% s
      losses.append(loss)
    ; q9 Z" {: z5 e& }3 G  
    % ^; O# O: n/ B( K" H' {, d  loss.backward() # autograd
    - ]" g9 f; i. l; e  with torch.no_grad():
    & ~' `$ V/ k1 n7 E: I    w  -= w.grad*0.0001   # 回归 w$ F& e6 C5 T$ C: c
        b  -= b.grad*0.0001    # 回归 b
    " _6 W2 }% L( N* a( f  w.grad.zero_()  
    , y" X5 I- {* e+ B* Z; j7 O- |" B( y  b.grad.zero_()6 C  d3 }7 b) K6 K- f. z

    : p: ]7 V- |3 K6 r% [0 Bprint(w.item(),b.item()) #结果! v/ _- u7 J" Y. E% m

      w2 E7 i6 _3 F3 k* `3 z  @/ c) sOutput: 27.26387596130371  0.4974517822265625) w0 K3 W5 d. ^/ G* m
    ----------------------------------------------0 v! J& t: d7 {9 e
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。* I* y" D( O3 _3 L* R( p3 w; y
    高手们帮看看是神马原因?
    4 `+ d8 u- q" N7 ^0 Y) M, a

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    0 y( O8 [7 W) M1 Y/ `5 D& f5 G' y
    + V: g4 S+ o+ {& ]0 K# z没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?" k6 u. U" M1 J, y" o4 u' {" d
    -------
    , U0 B. W7 E1 _$ d4 g: ~不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。' N1 Z  f$ K, ~% o/ V
    -------
    , d) p9 @7 a; s; S算法诊断部分,建议把循环次数改为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% c. \- U$ t# ?7 b+ u
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?3 Z5 v  Q2 V2 Z# @, a. |0 h
    -------1 C5 u6 O9 y/ g3 g2 t5 C: b
    不好意思, ...

    2 N/ Y8 N% }+ o' O* |8 |0 ]5 n谢谢,算法应该没问题,就是最简单的线性回归。- f. u  q4 {/ U+ P  _
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ! g5 a' x6 M. I  Z. F$ g
    雷达 发表于 2023-2-14 21:52
    ; p" s; T+ U: p. Z& g谢谢,算法应该没问题,就是最简单的线性回归。# M4 K* K  U8 {5 ?
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    , ]0 U9 ?% v' N8 g& Q2 f
    3 K9 L# [( N$ z8 N% `
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。+ i) g2 W* `3 B3 h/ K

    5 A% W8 b  C9 Q0 G或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 ) U0 {$ A3 i5 a4 u& }
    老福 发表于 2023-2-14 22:00
    , z8 t9 D# c3 d5 P; E9 `1 N0 G刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ) t# B( m0 |& I6 @" B
    - C- |8 X, f9 i2 a- w2 d或者把b但的起点改为1试试。 ...

    5 P0 S- \0 V; L) U4 q. F
    # B" b" d- e2 h8 q5 ~) a你是对的。
      \% `5 Z7 `! v% q& I去掉了随机部分
    - H  U; g9 @7 |: c#y = (x*27+15+random.randint(-2,3)).reshape(-1)& a- c+ z2 [; e% M' \2 ?
    y = (x*27+15).reshape(-1)
    5 o" A. d0 X: a& J% X
    $ h% M) w( B# {$ ~1 x循环次数加成10倍,就看到 b 收敛了, S( O- R, P3 [  X9 T9 X* a% ]/ g
    w , b7 A9 @0 ^* ^  ?+ S
    27.002620697021484 14.8261671066284182 I* K0 j: x, ~) b3 i3 Y
    ' A- K0 Y0 j* x! f7 m4 z7 b% F
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-27 13:10 , Processed in 0.062627 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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