设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 + ^4 J, z( L" g. w# W* v, K

    9 Z  M! k/ R1 U4 |: q: D( `为预防老年痴呆,时不时学点新东东玩一玩。
    $ _# h' E2 g7 j7 ]0 B0 f: r- n6 LPytorch 下面的代码做最简单的一元线性回归:
    . ^! h4 {2 j+ w2 y. f% [* o- o----------------------------------------------
    0 ?2 c5 e! x: Q% l. simport torch. e4 }7 r5 c7 w; d) K4 Q& f( @
    import numpy as np
    $ d" i1 f* _2 z+ e8 Q+ _7 r+ Mimport matplotlib.pyplot as plt2 |  \3 k. P) Y. m
    import random
    6 H8 ^' y' W% D( q3 n( e
    + M; L: P- z% r+ z, L% b2 hx = torch.tensor(np.arange(1,100,1))
    ) \! p. H1 Q0 @: }9 ^3 ly = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    5 R2 c1 S7 L1 K7 Q& K5 T2 k4 p9 D7 c+ |9 S5 D
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b& l  T' p- u3 r
    b = torch.tensor(0.,requires_grad=True)
    * ^! h0 x# u* W) x9 W7 N
    ! p+ n; e9 Y% \' g5 k  j' z# V8 Y5 F2 Xepochs = 1005 Y! {- D2 |5 _& u
    1 H2 _/ A. g. z2 Y* p( [
    losses = []% k: X/ U9 a) _( s' H
    for i in range(epochs):
    * |+ i; H+ {: ~4 H" P5 r  y_pred = (x*w+b)    # 预测
    # I$ O0 b$ m' q3 s  y_pred.reshape(-1)" h9 [- B! d+ R, w" ?( J

    1 k5 d$ n- S4 A" M  loss = torch.square(y_pred - y).mean()   #计算 loss
    2 F. t# b% Q1 ~1 Y' K2 O, J7 |  losses.append(loss)
    8 v, s# _" R# [" d1 j& N: Y  
    ( e% b# b& V: c+ I  loss.backward() # autograd
    + j* T6 D, k/ m1 B; x- N9 w% T  with torch.no_grad():5 S: g1 y' r! o+ _8 J: x- g) ^+ {
        w  -= w.grad*0.0001   # 回归 w5 C! M+ x3 s/ D( P: V0 I! ]
        b  -= b.grad*0.0001    # 回归 b 8 A- m0 A9 ~* u# o3 W; ?# |
      w.grad.zero_()  
    * O7 I) ?7 W( p% h: |  b.grad.zero_()
    * Z+ p# K2 `% B/ w; u, Y3 j, b% m# R, K$ C2 _, h1 P
    print(w.item(),b.item()) #结果  T6 z4 h' S; x3 j

    4 |  v+ W+ l9 g2 Q) sOutput: 27.26387596130371  0.49745178222656256 I& E( M( h! P% m
    ----------------------------------------------& T) ~1 h6 m/ L0 P
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    . ?$ c1 S! Z4 W. O+ N7 T高手们帮看看是神马原因?
    $ p# h" E2 E7 C. y. \

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    $ G: Z- U0 F( f1 a( ]+ y$ m' j1 `0 j2 l' r5 b) ^
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?2 Q  i) \0 q: x4 k1 [$ f; X( }3 T
    -------
    $ O" C+ B; G  T# x不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ( H0 M# D/ @4 B9 B: V/ X' D  |-------/ a2 ?5 V& v# G) C, ?  f- {
    算法诊断部分,建议把循环次数改为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:231 i1 y6 |# e/ a
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?5 Q& [$ t  i: z" S5 E0 r
    -------
    , ]+ N# [- y6 p% I, A$ F9 B* ?; \- m不好意思, ...

    : c  O' T. N& D% V' ^' r谢谢,算法应该没问题,就是最简单的线性回归。, d! `5 M. y' p" @# U( o9 P
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    $ V& f+ T* a% \. d
    雷达 发表于 2023-2-14 21:52
    0 c. p0 W0 `# E5 R+ ^4 x谢谢,算法应该没问题,就是最简单的线性回归。
    2 x5 H2 k  S9 h4 g/ m我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    ( G4 h& v5 D/ o3 N7 \6 Y' O
    6 N: D4 T3 a  ^8 q
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    & c) p% I" J, H$ R
    . T0 k- N: T  @( T4 L/ C6 Q! w或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 0 L& T% {5 h% X; d
    老福 发表于 2023-2-14 22:00
    1 s4 {. r( U9 @7 i( F刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ( P; B, E& O7 }/ @0 r' q% `3 c+ H- D. y1 N; y% i9 r
    或者把b但的起点改为1试试。 ...
    - E- d' f9 g3 I3 N7 a% [* B

    . @2 @0 M2 Q: p6 J+ I9 r9 A你是对的。! U) [- i# }6 v. P5 M& ], C6 ~
    去掉了随机部分
    + z# O. O; n+ \0 I7 @. i4 _#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    + b- d" @4 J4 L1 ry = (x*27+15).reshape(-1)/ o9 N, g# N. h/ a1 X
    " n% x) q9 I9 p1 j+ O* l
    循环次数加成10倍,就看到 b 收敛了
    & Z! u/ S) K4 z" z$ i. e0 u, Q' [w , b
    . d) M9 I. o  ]# l27.002620697021484 14.826167106628418  y( b+ Q9 V) B, L  k

    5 s5 c' C' {) Z: R0 x, {和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-16 04:52 , Processed in 0.035846 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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