设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    1 T6 j# p2 m+ ^1 H; ?1 N% O) R# g( L# h( u- J) i$ [: O( e% R
    为预防老年痴呆,时不时学点新东东玩一玩。
    / L& @8 T0 ?5 tPytorch 下面的代码做最简单的一元线性回归:6 b* }' R7 b3 V: o& \5 X0 i; _
    ----------------------------------------------6 f/ g4 r2 ~4 O9 S- O) K
    import torch8 i# n& l* i1 I: l
    import numpy as np- K& h4 x& U! C$ w% R
    import matplotlib.pyplot as plt3 c  u2 J$ y( J. G9 L% t, q
    import random  o6 a8 N, G( _8 u& U/ r

    4 g6 ]: B6 k9 S: Zx = torch.tensor(np.arange(1,100,1))
    3 b7 O$ _) f7 K" m- ~: k# d) T& cy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    : `9 p( R0 c, I6 |$ J  s4 R/ p% f
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    - E& v) {& N. B' _/ |b = torch.tensor(0.,requires_grad=True)- o0 W  C1 g2 {: Y; [3 l3 M

    : M. c$ B6 }4 O; `3 v) Gepochs = 1001 v5 Z: C1 l7 _1 e, p

    & j; r9 w8 B8 p; C' B) ]losses = []
    + I6 ?+ o  T2 Q2 g- f; Wfor i in range(epochs):
    2 s5 @. [; C0 t" a* F" ^9 R  y_pred = (x*w+b)    # 预测& i) Z4 x' q2 H& c0 v, O) c
      y_pred.reshape(-1)
    ) Z4 G( {% G1 G* t1 d 7 C4 S" M2 b9 D; o* F5 Q& T
      loss = torch.square(y_pred - y).mean()   #计算 loss
    - A/ D/ L0 I$ L% E& W& V4 ]" U! d  losses.append(loss): Y- c+ |6 o- O& S2 C3 u7 V3 x5 F
      
    . v8 A0 ^$ P3 f1 ^( ~; w+ `3 p1 N  loss.backward() # autograd$ O9 ~+ F" b% l# Z( x
      with torch.no_grad():8 S6 N' \: o; z9 y$ Q  y) V
        w  -= w.grad*0.0001   # 回归 w
    & I$ y) c# B$ G7 {7 M    b  -= b.grad*0.0001    # 回归 b
    ) u% c! f* e( ^; `, [. i$ S  w.grad.zero_()  
    . ~  Q% ^& ~6 f9 P  b.grad.zero_()2 C4 e- y/ V! y* F2 T
      `- M: F3 ]! i5 J) W
    print(w.item(),b.item()) #结果7 ~- y0 H. k* ^% {2 A/ o# B
    # a% K. U( G1 ?( K6 G
    Output: 27.26387596130371  0.4974517822265625
    : y: ]7 ~$ V! l8 s2 w# i$ c----------------------------------------------+ M* C+ B$ m/ |' o! f
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    # \+ ~$ V8 v+ P# i高手们帮看看是神马原因?
      N. T) A5 u- u  s, c: l( E0 b

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 - m3 y+ @8 @0 K8 d& G5 H
    4 I$ e- H+ }# G. g  `/ i4 S/ N! Y) z
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ( {- t  A) b) T8 m( j. q# J7 o2 H-------( ?' r3 I9 X* ~6 `0 H' A9 |( X7 D
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。: u  V9 i" s! ^+ U$ @
    -------* i6 Y% s5 `! z! I8 w% F( }% l4 v. I
    算法诊断部分,建议把循环次数改为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
      h# F0 a7 d) j5 q没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?8 T, }  X+ v9 T; `" W
    -------( _& P1 T' k& U4 u; S
    不好意思, ...

    5 i: X" r9 |' M- C+ c- q4 [0 V谢谢,算法应该没问题,就是最简单的线性回归。3 S' v# T1 q! @8 D; _4 z3 d) j
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 6 K) z7 V/ h( w3 |
    雷达 发表于 2023-2-14 21:52
    ) H6 {! M. |% h, m, a6 r' h; b谢谢,算法应该没问题,就是最简单的线性回归。9 p& l# @) J2 o& c5 y# c
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    # w# M% }7 E$ Z
    8 f/ k* O4 o6 f8 @刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! g6 f( [7 H) {
    , z- T9 G$ ?( t: l* r# ?8 S
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 3 k2 [" V, C! P8 E! u: Z3 P* u
    老福 发表于 2023-2-14 22:00
    / Q, U9 i' b; D8 B, C刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ; v$ U, `7 W  n. |' r3 }) j4 T; ^  i  \0 g
    或者把b但的起点改为1试试。 ...
    % w$ J7 C- H3 C& X6 Y) h

    ; Q& |0 W5 p  B- I9 D( k你是对的。$ Y3 J1 `% G2 ?+ e
    去掉了随机部分# S- |7 L5 _! j9 G" ]
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)7 ^% U+ _" c% @6 [8 c  M
    y = (x*27+15).reshape(-1)9 @. B( r& m+ B6 A6 R) {
    3 r7 u/ [8 b3 ~: L# D
    循环次数加成10倍,就看到 b 收敛了4 r2 i- |# }; k6 G
    w , b  I8 {# s2 }; U& D9 N7 b  E! M  Z
    27.002620697021484 14.826167106628418
    3 F; ~+ i4 s/ [3 t- f
    * Q. g: R$ \+ ^  T8 g, m' }( @和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-4 08:17 , Processed in 0.060857 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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