设为首页收藏本站

爱吱声

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 $ N7 w/ t6 r, D! E/ u

    : G$ f" O5 h2 _6 [  Y为预防老年痴呆,时不时学点新东东玩一玩。
    / j5 X- `# ^8 F; D" bPytorch 下面的代码做最简单的一元线性回归:
    . Y$ [( l8 [  f% Y3 i----------------------------------------------# P, u* [7 E5 q8 ?
    import torch( _, d" z2 {' U0 x. q2 x
    import numpy as np5 r) x8 _& f" p- d& s' n  u7 L
    import matplotlib.pyplot as plt
    $ a% D) k5 s  [* e7 I, pimport random! @7 ]1 E/ f. ]

      K+ n# \. w" _x = torch.tensor(np.arange(1,100,1))0 S! y) L6 K! X/ B
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=158 K2 E/ Q) \8 D, c
    & I* ^. x: `$ ~, v$ j1 M
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    8 Z7 |* M0 B( D, F+ W- F/ Hb = torch.tensor(0.,requires_grad=True)( e' M+ Q: f9 Z: U0 m( S

    7 p( ]& U2 F( b4 yepochs = 100. [% Q$ n# n% q" ]* y
    1 h! G4 D% r, ], p, J6 \0 `7 {  _
    losses = []
    1 G% @  J/ {9 H* d6 d+ mfor i in range(epochs):
    5 _6 B9 Q5 d; G7 ]  y_pred = (x*w+b)    # 预测
    ; F0 @. `$ X! X! G: t  y_pred.reshape(-1)4 r) o9 f; x2 g

    : S  }- }7 U* d, `* S  loss = torch.square(y_pred - y).mean()   #计算 loss
    3 w3 d+ `; l3 n0 G" l. s  losses.append(loss)8 f  S2 g( X) Q
      
    5 _8 L) j' E2 N& H0 H- O  loss.backward() # autograd# u- e+ q- t& D7 A8 [
      with torch.no_grad():
    4 y  g0 O. b+ f; M) C" X    w  -= w.grad*0.0001   # 回归 w
    2 T. S1 }4 w% ~7 k    b  -= b.grad*0.0001    # 回归 b 4 Z0 g7 m4 W% o/ v6 _- m& H
      w.grad.zero_()  
    % s0 Z5 |- C! Q: d5 j: D  b.grad.zero_()
    9 W4 J1 e7 D1 g+ c9 \! e
    / a6 Y# ]6 e/ X4 Cprint(w.item(),b.item()) #结果! e5 ~6 r9 Y3 s" v0 P& ?  t

    8 u* s# o2 J0 ]1 gOutput: 27.26387596130371  0.4974517822265625
    5 C. g. R( J' z( b9 V  ~----------------------------------------------
    , {* Y8 L- Z% |6 k5 {, W. Y/ r最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。- n7 Q0 i/ q! E5 u3 v  L6 z
    高手们帮看看是神马原因?
    % ^/ k  B! ?, c; f

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    2 y. r% W9 O+ Q! P5 Q5 G  g! w; c0 G+ Z+ H7 M* |9 g6 ?) y
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?" H+ V& z! m  \5 }
    -------# k6 y; l! I+ ]; W. E
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    1 e; f4 k; C6 n8 n$ M-------
    ! |+ j5 e6 m! w8 `3 Y& g5 W算法诊断部分,建议把循环次数改为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
    7 f6 ^( n% L! ]3 P没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?7 H3 N7 l3 s- n4 G1 `8 J. x6 P  f
    -------( d; u6 a  Y: x6 c  h# _& k
    不好意思, ...
    ) f0 V5 X7 d6 [# ?+ i
    谢谢,算法应该没问题,就是最简单的线性回归。
    5 m3 E+ |: F& a- B& B  {$ @我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 / o3 F; J4 x6 A" m$ ^% ?2 V* F
    雷达 发表于 2023-2-14 21:52
    2 g3 k: Y6 i; m5 n" g+ i7 O谢谢,算法应该没问题,就是最简单的线性回归。# O; ^3 `: ~) p1 r4 l
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    : ?& P  |( Y* g& l5 L! E
    0 Z% |9 N) ~1 T6 _
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, f! ^+ W: B" _( y2 Y7 a

    . i2 w; |" Z: q3 [8 r4 H或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 $ c) l3 e& F( Q' |/ Q
    老福 发表于 2023-2-14 22:00
    / a- G! Q* x3 L, E- s刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。0 x( s% w2 L* m# o7 D& W3 M, N1 [
    ! l+ T5 Y: }7 i  W; e+ `
    或者把b但的起点改为1试试。 ...

    * A) g" ^" J8 R9 C' H0 c2 b% J- i% G& @: j0 M9 q
    你是对的。
    8 u1 C- k. j% H去掉了随机部分
    ' v9 |2 ]3 E5 g- ~. S) |#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    5 R3 p$ z. z/ q0 v0 ]! N" W, y; uy = (x*27+15).reshape(-1), O) N) j# T% B/ k1 S1 d* N7 U( F

    & Y& r& L1 f9 l* N循环次数加成10倍,就看到 b 收敛了
    # D6 q& f; J/ N% nw , b
    1 e7 |, X$ ]; F& N: p27.002620697021484 14.826167106628418% F4 @! Q' C8 c% J. s% ^: F( p

    2 O- w. {. a, x  f$ f4 p和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-26 14:51 , Processed in 0.067776 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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