设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ' j+ q/ U( G& n$ v

    2 x4 e6 G8 S( Q. j! e$ N; y) p. u为预防老年痴呆,时不时学点新东东玩一玩。3 K; _3 d, Y( ?) r. W# f- Y2 @
    Pytorch 下面的代码做最简单的一元线性回归:2 N7 R) T. U$ i( a/ B# }9 i
    ----------------------------------------------
    3 B9 l+ r8 K, M0 g; rimport torch: i+ @' V4 g- x$ G
    import numpy as np
    3 w5 R, m' g6 O/ s! limport matplotlib.pyplot as plt& G+ L' x  h" }6 N
    import random/ Z$ o5 r" Z7 t4 y, @) {; k

    6 b+ I6 ?+ r: d; N( H$ ~x = torch.tensor(np.arange(1,100,1))6 Q. `7 g% e6 v/ n; r
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15' S8 N9 |" \/ ^2 d: t$ ?% ~
    ) _$ k7 q; ^# T# _7 s
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    * p5 E! o$ `0 E% cb = torch.tensor(0.,requires_grad=True)$ \) A' c% Z. Y& T" Y

    . J# h8 c2 a5 \" O& J3 z4 repochs = 1002 [, L/ [8 e& K/ T& z* |
    9 d4 H) @$ O* W4 N+ `$ G
    losses = []( ]: }+ r1 J  e" M9 t2 j
    for i in range(epochs):
    " }8 f6 ?+ d+ o) q: _# U  y_pred = (x*w+b)    # 预测5 \4 k# ^6 U6 G% w9 F9 M. T" K
      y_pred.reshape(-1)( Y. J( R$ {. _& i

    6 v# b8 Q3 f  K8 x8 G. Y' _  loss = torch.square(y_pred - y).mean()   #计算 loss
    8 I, U# \3 _3 r8 U( z* x* F1 [: K, Z4 q  losses.append(loss)" n+ y' Q' y4 {2 v% I2 i
      $ s3 O0 f) @8 L5 @/ d0 w
      loss.backward() # autograd2 b: |! L6 S8 w3 ~/ [% o+ E
      with torch.no_grad():
    9 K# r+ Z" U% D' _: d    w  -= w.grad*0.0001   # 回归 w: `9 V& F9 P1 \3 [5 m( b
        b  -= b.grad*0.0001    # 回归 b % z" ]7 C# ^; o8 a$ A* D4 \
      w.grad.zero_()  
    : X9 n% c6 P+ l) o  b.grad.zero_()( g$ U/ B0 _7 h8 m+ G- ]

    - j( H; h2 T  R( f7 S+ mprint(w.item(),b.item()) #结果1 U7 N5 b/ t  S- r' s, s

    * A6 A* i* R8 Q! p' l* G. oOutput: 27.26387596130371  0.4974517822265625
    7 ~- e& A3 O  Z9 _! h----------------------------------------------
    ; P+ `" \8 Z+ v) }最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。/ h5 F5 R9 z7 @# z2 B( I2 y
    高手们帮看看是神马原因?" F& A3 ], |. m, l0 O  b0 e" P

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    2 T4 A% S* m7 Z2 x/ e3 K$ Y# `: X: \! y  _9 w; d
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    6 C' h1 m4 c0 Y; n0 A' {/ p-------
    5 H) N$ z- y( S3 G& R- S8 U不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ) `3 i1 h8 H  d% b4 v-------
    8 K8 y: l; g/ ^6 ]算法诊断部分,建议把循环次数改为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 h. D- ]6 E/ r) ~没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?7 P" J  L' v# F& n* s. d
    -------  g* {8 ?& ^5 O! _
    不好意思, ...
    + _7 J, S  G4 q0 s8 a9 k" Z
    谢谢,算法应该没问题,就是最简单的线性回归。
    4 v2 j* ^$ ?4 ~6 H0 k7 |我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    - `  G7 e1 A7 g( B9 o  i3 E
    雷达 发表于 2023-2-14 21:52% d" U- f- @) L, B" |$ T2 ~
    谢谢,算法应该没问题,就是最简单的线性回归。
    ) u8 _% s6 z5 D1 K7 c我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    0 H4 M/ b. F0 ~7 T2 R3 c' t! h& G% |# ~$ W1 S4 s
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! C5 w) o/ Z8 G8 _

    2 c) L" O$ ?$ X: i或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    : r+ a* z8 Q. p6 e* C2 d  U
    老福 发表于 2023-2-14 22:00
    ! p- ?) x9 X& O6 M/ Y) g7 d6 R; Q刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    4 a! F$ J6 o, x! ]" L6 q7 U+ ]* K7 J6 E' ]; M2 z5 k+ F
    或者把b但的起点改为1试试。 ...

    6 K- Z, J4 z' `, t) C( j* z- z4 h5 g  Q' W
    你是对的。  N/ z8 P  V+ v$ S2 p8 s" H4 p
    去掉了随机部分
    + r! H5 Z& d8 d6 w0 O' r#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    9 v. O8 s9 f- J, l; @y = (x*27+15).reshape(-1)5 W  b1 p8 @% T( l

    , z& Z7 f3 ]9 x( K) G9 Q3 V/ B" V1 V+ x; ^循环次数加成10倍,就看到 b 收敛了3 Q+ w, k' N! m: D  E1 `8 z) M
    w , b
    5 ~2 W) Y; E; h4 x. z; B27.002620697021484 14.826167106628418+ C5 B. e) k8 u" K

    . r: g* e$ f* q, U( L) b和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-6 09:28 , Processed in 0.033757 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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