设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    : e2 Y$ O$ J) u& ^; G5 h  Z, Z( S
    $ c2 K- p. I; m& ^$ y4 n为预防老年痴呆,时不时学点新东东玩一玩。: b! C2 N- H4 `$ D
    Pytorch 下面的代码做最简单的一元线性回归:
    : z( r& V& g9 q- u----------------------------------------------
    0 H' G- k) I' l6 \# K3 m) ?# Cimport torch
    + p2 [5 \3 o* Y; E. {' C  Limport numpy as np
    8 }$ |* e! m( b& F7 x4 }import matplotlib.pyplot as plt9 c1 f! S1 \3 q! Z! ~# v
    import random! h( C# w5 o' \& E3 N, ~

    * f3 G: D2 m) g* x8 jx = torch.tensor(np.arange(1,100,1))
    # K, D) {9 w% O% P5 f) _y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15! K- x; l- }" m+ n: p# \9 E# d
    % h, R% S4 M+ |* N& r& \" P
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b" b( i+ J/ X1 _
    b = torch.tensor(0.,requires_grad=True)8 X/ z! {8 T+ o$ j( |( I
    " I$ R) |: {. C2 P
    epochs = 100
    - Q! R/ S: V6 P' ?( G9 G' d! s9 m  P+ S0 o$ l: @
    losses = []- G' M. ^3 O% m' r0 [
    for i in range(epochs):2 k  {6 q2 F: y7 t
      y_pred = (x*w+b)    # 预测
    ; P: m$ P0 v9 _& r) l! m) g  y_pred.reshape(-1)
    : l. S7 F: ?& `( J* U, m 8 ?/ L) o) p: S- |1 V% m
      loss = torch.square(y_pred - y).mean()   #计算 loss
    * j; Z. m' q& V: u; o  losses.append(loss)
    ' p* I3 V( `/ {# ~0 u/ b$ X# s  
    - f$ m) n: Y5 x4 m  loss.backward() # autograd
    ( G( M5 O! j5 g' W  with torch.no_grad():
    4 M! t$ T- g* A! [0 z    w  -= w.grad*0.0001   # 回归 w
    5 k7 E' K  V( y- Q  w    b  -= b.grad*0.0001    # 回归 b ! v' I4 _0 D% Z( x/ |
      w.grad.zero_()  ' U/ M( @% H& Q  K4 D
      b.grad.zero_()
    ' W/ J8 `, Q! M5 d9 ^( C4 B& X9 f# C4 m: r& U
    print(w.item(),b.item()) #结果3 j9 s  e# b4 z& f
    1 @: z: v! n8 f. D
    Output: 27.26387596130371  0.4974517822265625
    9 W$ \8 J/ D. d3 N7 S----------------------------------------------
    - P- b, R, k/ q) @; w2 j最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。  G& P! ]4 x- O$ {
    高手们帮看看是神马原因?
    # }0 ]5 G3 `; \2 @

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    + M% V( B0 k0 Q! e; {# e2 A5 l: A' L- n: m
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ) M& u# v2 f1 t-------
    ( N& R0 T6 A" ^. g& ^; f不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    % v$ T! R) M. x5 C9 [( i2 h-------1 u  L9 x$ |- h! s- c! c' M9 S
    算法诊断部分,建议把循环次数改为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( q; k  J, l. }
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?9 N* p$ ]+ \' L2 N
    -------
    $ e' D' A  Y0 I# P) i6 _2 D不好意思, ...
    ) |, a5 P/ f" _$ Q1 L* Y
    谢谢,算法应该没问题,就是最简单的线性回归。
    ) t: B$ c; ]* E3 x, x  X+ u我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    2 ^; L# ]  K- A9 R# U5 G' V
    雷达 发表于 2023-2-14 21:52
    % L- s: }% N6 K1 j! F# p4 k& R谢谢,算法应该没问题,就是最简单的线性回归。
    ! m0 }& W; U! n# T5 ]$ T我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    + y, u& H/ N* [% L4 c$ Q9 ^) m, }) s) c7 D3 H
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    $ b8 f: y4 x1 {) i3 {' m
    , A( J" }" k7 V) j% w; ^4 r' {7 W或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 $ J4 U# L1 O2 o8 T: T1 r
    老福 发表于 2023-2-14 22:001 N8 j( s3 y# F: O' c4 e9 O
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。5 K4 ^, J% ^# u2 L

    , W8 C3 Y2 W, T1 E. i" W或者把b但的起点改为1试试。 ...
    # `1 `* q. E+ `0 Z+ z
    0 J- c. G9 k. N* o3 U6 Z/ |, M
    你是对的。
    + r, f2 z/ A) B4 k去掉了随机部分
    & r  r" b1 P0 H#y = (x*27+15+random.randint(-2,3)).reshape(-1)3 Z0 `- V6 }! @6 D6 ?& D; [" R4 E% `4 b
    y = (x*27+15).reshape(-1)) W9 \, H- E) h3 V
    7 n. s: K- e8 G# @
    循环次数加成10倍,就看到 b 收敛了
    ' y" f3 {& L3 z& c3 U2 I/ A3 jw , b
    / n# Z% F2 ?8 D27.002620697021484 14.826167106628418
    # A0 g9 q& m, a- L4 Y4 `* ^6 Q$ h$ N% k9 `$ l$ l( X; I( e
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-25 16:48 , Processed in 0.061793 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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