设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 9 I* `( M2 E# `: ^3 [7 n& B, H

    5 y4 L6 y$ D0 n8 m/ E为预防老年痴呆,时不时学点新东东玩一玩。3 D+ e) q6 n+ a
    Pytorch 下面的代码做最简单的一元线性回归:; e7 ~+ e- d+ R" w7 F# i
    ----------------------------------------------
    ; M. W4 G+ I; G: zimport torch
    3 y! V7 \" K' z7 x$ Uimport numpy as np- ]" ~: a1 B/ A; m& G, @; \
    import matplotlib.pyplot as plt+ Y- Z4 ~5 U. @6 \7 ~" \- `, y: G
    import random
    8 Y. F0 A& c' \- S' x4 X" }4 B8 t1 M3 r. O$ V5 W
    x = torch.tensor(np.arange(1,100,1))* ~# d/ d1 U8 S- e8 F
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=150 w+ w4 Y5 J$ i3 R7 I
    3 `6 C- j7 Y6 U) ~7 u
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    2 X, a5 i$ V1 b/ k  Y2 j6 u" X: Z7 zb = torch.tensor(0.,requires_grad=True)6 X5 [/ i8 v" ~$ {0 d) l7 b5 |

    ( S5 ], Q8 s1 ^6 hepochs = 100
    * a9 I; B" |  s6 q4 `
    , B; j9 Y/ v) T+ g; O5 Olosses = []8 R! v, k$ _6 A5 h. V
    for i in range(epochs):/ R5 n  c5 Z1 D) i/ o
      y_pred = (x*w+b)    # 预测
      c" e7 o) `: k9 [  D; s  y_pred.reshape(-1)
    ! V- d1 v, _6 h. @ 0 l5 @3 d5 ^% u" w6 m& I4 s6 `
      loss = torch.square(y_pred - y).mean()   #计算 loss
    9 X# C/ m1 o; h, t/ ~- O& ]+ i, j  losses.append(loss): r) K" Y% B8 H; K8 K
      2 Z& S% t$ Q6 e$ M3 O# a4 W( ?
      loss.backward() # autograd
    * v, F! N% W3 O9 X6 w- q2 R) k& `5 W  with torch.no_grad():$ X1 L) T- n' W% A& m
        w  -= w.grad*0.0001   # 回归 w) r4 ]8 u6 r7 B' T2 Y% c  ~
        b  -= b.grad*0.0001    # 回归 b
    " o8 U3 a' p% q  w.grad.zero_()  
    ) y" p+ w# G+ u; c  b.grad.zero_(): @5 r" }$ @: y$ S

    * N8 J- R5 v6 Bprint(w.item(),b.item()) #结果
    - T7 n( T- I; M3 S9 s( P- Z! J2 z, t7 _; t
    Output: 27.26387596130371  0.4974517822265625
    + ?+ R# Y" q9 r8 X, t8 h- T----------------------------------------------2 ?* s4 _, l* E( A
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。- v% G8 K$ }4 S, R! @- t' b
    高手们帮看看是神马原因?
    ; |2 j2 n) |3 T$ ]

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 / v( B7 V1 J6 v/ P& S6 ?
    % G5 C/ G$ N  ~6 j7 g
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?( U$ W; N; q/ T/ Y, }) |/ T) v
    -------( o* ]) }5 s) J: \6 S) \
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    1 M4 m. w9 T! X. B# [- z' j7 S-------& f: Z$ @& p8 c: Y/ i& u+ ]
    算法诊断部分,建议把循环次数改为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
    1 m9 P# }$ K, m3 o8 H/ c9 R5 J- K没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    # H) E. U6 X9 u0 W9 M& m' V-------
    6 _  q  d5 q7 O" W3 {不好意思, ...
    # Q6 E5 L9 t5 @9 D, o, p$ S
    谢谢,算法应该没问题,就是最简单的线性回归。
    & b! S. [$ ^9 }# v/ I% z8 C* Q我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 0 h- t/ A) ^) H
    雷达 发表于 2023-2-14 21:52; f- H" M& x2 r$ X/ D
    谢谢,算法应该没问题,就是最简单的线性回归。# d5 |4 F: }% x5 J
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    ( G0 ?- a( J9 G% \/ p6 S/ z

    8 _1 k( X( ^% @: m+ Q/ k9 D刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。" l! T- I# c/ i$ D6 g4 j

    9 o3 v8 c1 ^: U2 I2 l4 c或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 0 m# I. f2 I+ A5 b, _( }1 Y
    老福 发表于 2023-2-14 22:000 U3 ^1 H% s! x7 b, G. f
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    4 E1 v; z) A2 h3 y. ~. |
    / J! {8 `8 [; ?: v( I或者把b但的起点改为1试试。 ...
    ; _) l: X& \+ H! v4 U$ s. O
    6 E! L% }2 k( v  }- }
    你是对的。0 d- m, K3 H9 s2 i4 J' r6 E
    去掉了随机部分
      B) k1 i+ w* I' R- g# ?% d#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    ! C: ?9 Z" l9 z- |* U3 k' t5 xy = (x*27+15).reshape(-1)
    + M( O7 z; x5 q" S! u, i2 |+ e( l
    1 m7 z; Z: K8 q$ v) z8 B# y: u循环次数加成10倍,就看到 b 收敛了
    . F0 d% _; P4 |# R" K( Z. nw , b
    8 Y, Z' U2 Z4 F! o9 o; w" f1 p27.002620697021484 14.8261671066284184 \# i2 ?5 j) w6 _
    , i/ Z/ T+ m6 G# t2 P, I0 }* [; h
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-19 17:23 , Processed in 0.029667 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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