设为首页收藏本站

爱吱声

用户名  找回密码
 注册
帖子
查看: 1800|回复: 4
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 + J. }; [3 e2 N# c

    6 P. k9 ^: ~% h+ L" x为预防老年痴呆,时不时学点新东东玩一玩。9 v$ }, }7 y! U5 O# P3 R0 Q
    Pytorch 下面的代码做最简单的一元线性回归:
    4 B  t7 h7 c2 A" W----------------------------------------------2 m# ^- ^, Z8 x! h) i3 X
    import torch
    " r% _6 y% h7 a; ]7 w$ |  `import numpy as np) s* P9 u7 ^% O- J, ^4 \) |2 e
    import matplotlib.pyplot as plt* k+ u' A$ X6 ?9 A, E
    import random' D7 ?' o6 g0 W; R

    # r3 y9 I+ G9 |- i2 ^9 ^x = torch.tensor(np.arange(1,100,1))( a6 P) K- Y- G; I6 i3 A: s8 }
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15' s; u; U1 g! Z: _1 r# y: V6 \4 r

    7 b1 e) u6 V& L- B! Iw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    : C& S1 X; K2 _  M% w7 [b = torch.tensor(0.,requires_grad=True)
    : x9 J9 t' R$ M- j/ n: k( c
    9 F" F/ f: X( e4 ?epochs = 100
    ( I% M- ]' g% o' w) a- ^; z: Z# c8 O& L! g/ {) ~7 G
    losses = []
    " j+ {2 C0 ~8 C6 q2 C# ifor i in range(epochs):2 C/ a9 ^8 ~/ Q: A$ [; h8 r
      y_pred = (x*w+b)    # 预测! K  \! l% a' v4 A) \: B. v' M
      y_pred.reshape(-1)
    $ G# I- w9 X# \$ @( a8 V* K. R 4 [+ ^# P" u3 ?% B: c
      loss = torch.square(y_pred - y).mean()   #计算 loss
    1 S3 C3 B# w& k; U  losses.append(loss)) n! R. i3 |6 s# b7 i/ h0 S: M
      
    . L' ~- y, v9 X* `+ v. V  loss.backward() # autograd: Y3 F; v0 p% n' I+ ~, X
      with torch.no_grad():
    ( N- A$ c+ r# g    w  -= w.grad*0.0001   # 回归 w
    & L' w  f6 d4 {2 B% [1 h    b  -= b.grad*0.0001    # 回归 b 5 E/ c: C' V  b; l
      w.grad.zero_()  
    & L( @7 d5 H8 b: |7 S  b.grad.zero_()9 f) C! ^, D" c; g' P+ M

    7 Y3 t* a- N1 T/ i9 w, ?8 `3 b  ~* bprint(w.item(),b.item()) #结果! I% d/ B( b& |4 p2 j8 _
    ' V4 O: Y4 y- _
    Output: 27.26387596130371  0.4974517822265625
    4 u9 D% L8 c" a% l& S" F----------------------------------------------+ X- j& o" y/ `; L. O7 s3 f
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    * a5 |5 a% }7 l! h高手们帮看看是神马原因?
    2 z5 R! B! k, ~" f. O7 @

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 + b3 I+ h% w9 T# \2 p

    5 I8 w. K: I0 t* x3 i, X没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    6 o- h8 S7 f9 _, u" y7 [8 |-------2 E. z! U" D- z2 `6 e/ A3 R
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    . ]& D6 ?% o) h5 k  C7 ^/ V% r" t* b-------7 c  D$ k9 _( L& K) k8 O
    算法诊断部分,建议把循环次数改为1000, 再看看loss是不是收敛。有点怀疑你循环次数不够,因为你起点是0, 步长很小。只是直观建议。

    评分

    参与人数 1爱元 +10 收起 理由
    雷达 + 10 谢谢建议

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    板凳
     楼主| 发表于 2023-2-14 21:52:57 | 只看该作者
    老福 发表于 2023-2-14 19:23
    ( c+ U, L: [' Y9 H5 H没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?& f( b  R. q+ ^1 K$ W( L7 p) ~
    -------( k" [+ L- P9 x$ E& g* z8 r7 d. t
    不好意思, ...
    . ?% \2 b& ^+ p: G7 o
    谢谢,算法应该没问题,就是最简单的线性回归。
    2 ^& U6 L# W8 K, Q5 w2 W我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 7 |3 o0 i6 h' P! R, u% H( l
    雷达 发表于 2023-2-14 21:521 I3 E. X' ]% F6 e, V! ]
    谢谢,算法应该没问题,就是最简单的线性回归。( s8 n* O( S3 [/ M3 z
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    3 j, L) O4 V( h, @1 l( j2 {! M2 o& F0 ]' E2 h
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      h# }! c' r7 c: Q# S
    1 b) |: n- F) J) _$ H" \4 O: A或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    3 K% t' f& I% H' n
    老福 发表于 2023-2-14 22:000 A6 R: y8 n0 m
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。* i* o9 o# _. e' U7 Z' j+ \- m# c
    ! \9 Y. n5 ]2 G3 i# M% D' ?7 e
    或者把b但的起点改为1试试。 ...

    $ {( K3 J& _2 I% a' D7 O
    + J1 I, w+ K* I5 J: h1 i- C: d, ^5 ~8 M你是对的。& S/ s8 x# U7 c' {2 ~3 O, e0 N
    去掉了随机部分
    + ^( y% M) s0 }8 B$ Q. J2 A8 y#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    & i' b9 w' l5 f, J5 Q% [' ]y = (x*27+15).reshape(-1)
    - W* Z- G3 n" r! r7 U  w/ D+ }2 |# z& V+ ~: s7 ]6 x
    循环次数加成10倍,就看到 b 收敛了7 a  C7 j% K4 ]8 N( z* a
    w , b) a4 I6 l) ~% ?8 F
    27.002620697021484 14.826167106628418) `9 a* f4 U" f/ R
    8 {6 g7 @$ G  L2 C. F9 J
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-7-20 12:44 , Processed in 0.041359 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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