设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    ' d) P$ u& W- b
    6 S6 h" @, W7 S  v5 N# U0 H为预防老年痴呆,时不时学点新东东玩一玩。
    ! M7 f0 |8 [/ j% a2 D3 oPytorch 下面的代码做最简单的一元线性回归:# q2 c- V6 w7 ~8 A: o* a
    ----------------------------------------------) I( d  Z- j6 D6 o: {* j
    import torch! \' C2 w% U. B, s# D# G) H0 u" s1 {
    import numpy as np- \9 V* N  I* O1 U) E( O: u" W  Q
    import matplotlib.pyplot as plt
    . t3 N- P  d& o- T. Z* d; wimport random
    ) u" p# c- a& e6 u( G9 G( x, V( X
    ! W" ]& \4 a$ h6 a8 K, _- qx = torch.tensor(np.arange(1,100,1))1 e' n9 a+ }- N6 d8 \( T
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    # w% A8 f# {, ^
    $ @0 d+ V" B% B) s7 w; ?9 Sw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    8 L" b! K+ t! Gb = torch.tensor(0.,requires_grad=True)
    ; q6 ~! w7 X" n0 U! f1 T. w7 Q
    $ \4 s8 {/ f6 z- |1 O. bepochs = 100
    ' J. R) n: N" i/ D3 B9 ]8 J
    % P. ]( z5 y( u) g5 y3 |losses = []
    ( A' C1 S6 G3 A( ~' Jfor i in range(epochs):
    2 ~# r; R$ Z8 w' g$ y; {& q% ?  y_pred = (x*w+b)    # 预测  n* [. Q, v0 ^: {& ~/ |: \
      y_pred.reshape(-1)
    0 V0 _+ L5 B! d% y* w0 _# h 2 P$ F, U& P  X+ {7 Y: r
      loss = torch.square(y_pred - y).mean()   #计算 loss
    6 y5 \# _1 `) F; c4 r+ B  losses.append(loss)
    8 ^' O8 a* t$ s; W0 n! h/ \( H  
    : z$ V, _. O' v. R3 x  loss.backward() # autograd
    1 u1 w/ D0 Z5 e6 B  with torch.no_grad():
    & C! N. _1 n# h1 r! V& M    w  -= w.grad*0.0001   # 回归 w5 W" j! K  H% A) G9 s# K$ p, m
        b  -= b.grad*0.0001    # 回归 b
    9 |; n, L4 G# Q- }  w.grad.zero_()  8 H/ U* {: S' C0 `
      b.grad.zero_()
    " k: S' U  d% `& H* z7 M+ L  I  j* A( z+ h% y
    print(w.item(),b.item()) #结果+ M% F, `/ \4 A2 Y

    ' }' `1 s/ @3 E3 y& @Output: 27.26387596130371  0.49745178222656254 ^$ i8 X2 M9 [
    ----------------------------------------------) w: \0 ?' w0 {! f$ M& B
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    5 \! p1 }" ?! C5 o- D高手们帮看看是神马原因?7 E) W# `% W/ \/ D5 f

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 , e6 p7 N* @, Z: q- A) j) t

    5 j. N0 u6 }* _6 n没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    , U( f7 Z3 B' x, W  O8 ^. |-------
    . d' I$ u" \8 Z6 z2 e3 e( a, v不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。5 ^5 n0 r6 {6 f1 P* s' w) z; j  j
    -------
    - g7 O* f' n) Q2 y* 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
    2 a% J) r) `' i6 p没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    9 J$ @" m8 |. K/ q$ K-------4 k7 T& C. A& t' T+ q* o6 Y
    不好意思, ...
    % ^0 B4 v, A- M9 x- P7 @+ ^
    谢谢,算法应该没问题,就是最简单的线性回归。
    ! {$ C7 M& L) t3 `/ B我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    2 M) z( D4 o3 }( Y% P5 f& x
    雷达 发表于 2023-2-14 21:525 k7 C4 i0 `, l  f# Q  h2 A4 ~7 g) `
    谢谢,算法应该没问题,就是最简单的线性回归。
      [: }7 \6 \" \; \我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    0 Q5 x/ ~0 S8 P7 l
    + Z% `2 O+ L6 I  b: d; O. a
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。( F% S' j7 F5 ]+ T4 n
    : R0 ?7 e4 k( [& J/ ]
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 ( c9 A2 y4 e- r! S. r
    老福 发表于 2023-2-14 22:00
    6 b# M# b) ~7 ^7 F刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    4 n  Z1 k( Q0 T8 r& y' t& Z
    + n6 R' {& j% \; ~8 [8 I或者把b但的起点改为1试试。 ...
    " |( M2 p& \' a4 `: t
    8 E/ z2 P# e3 _0 l* c
    你是对的。* I0 d$ j2 b$ X3 |2 s, N. H% c* Z
    去掉了随机部分
    , E6 F% i. l7 i& Y8 N6 y  X#y = (x*27+15+random.randint(-2,3)).reshape(-1)6 f" t  ?& {* ~& `. N2 C
    y = (x*27+15).reshape(-1)7 i- A+ J# F! a( j1 k" ^- _

    - P( R' K/ ]  w  H' y循环次数加成10倍,就看到 b 收敛了
    $ P" ~5 R& V& x1 {9 j! f6 tw , b( D6 D! E0 v. ^  Y
    27.002620697021484 14.826167106628418
    5 a& v. }  ~0 U5 `# h5 E4 f& \! F" i7 `+ J+ m) y8 q' m: ~1 X
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-24 09:51 , Processed in 0.033696 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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