设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    8 g7 ^# T6 F3 T: S$ t# a* w4 X; L' b/ ~9 e$ r% R1 N  N
    为预防老年痴呆,时不时学点新东东玩一玩。
    % \  t2 p3 F- k9 B2 @Pytorch 下面的代码做最简单的一元线性回归:6 q  t0 D; Z. u3 A6 N7 ^
    ----------------------------------------------
    ( M- {" j& n0 S8 Uimport torch
    9 Y; z. A& E' Eimport numpy as np+ @2 Q: u' U" l
    import matplotlib.pyplot as plt* y" |% E8 E/ r; N; u: l( j- a, A
    import random
    : [3 H/ m- w/ I3 h4 ~: m
    " {0 s: G* E$ |! n) V) K& P% z8 ?* p4 Mx = torch.tensor(np.arange(1,100,1))+ A% K. G" M) E4 t5 Y  \
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15* Z' s" A) M1 ]
    9 E- M( ]  l3 Y- R( X
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ( N, |6 u" w" U4 z. X- _b = torch.tensor(0.,requires_grad=True)5 G( m1 ]# y4 S
    ! m5 g4 O& E+ a% h1 `$ _; b( D+ E
    epochs = 1004 H( G8 C8 M, z4 G) f: {- t

    + S8 j6 `  f) f; s+ a6 V* slosses = []
    / d1 T0 X$ F$ `5 @for i in range(epochs):3 a2 I6 P9 [( s# ]$ K1 O1 B+ |
      y_pred = (x*w+b)    # 预测
    ' ]. Z0 l+ ?1 X0 n: Y/ _+ E4 A: T  y_pred.reshape(-1)3 P8 n7 |( U% A) f4 V

    3 Q* h$ ^9 [1 N( I  N  loss = torch.square(y_pred - y).mean()   #计算 loss
    . s8 x- b" m- x9 v( u/ f  losses.append(loss)
      t( `# ^  f+ z6 T; K9 p5 i  
    % {- G0 r* p# q$ {8 [  loss.backward() # autograd& R) v0 b( n4 h- R
      with torch.no_grad():
    % L* T! z! o9 |; Q5 `2 O! Y    w  -= w.grad*0.0001   # 回归 w+ q; k) V7 _: N( Y+ }
        b  -= b.grad*0.0001    # 回归 b " [0 r" e; q9 m$ B
      w.grad.zero_()  + ~/ e. R# ~/ a# V. c
      b.grad.zero_()$ x2 h- h* c! L4 _4 Z4 q/ w1 U

    $ {( b' L) X. M; `print(w.item(),b.item()) #结果) V$ ?1 c1 o7 \# ~7 e3 q
    & B. P3 a# ]6 J9 C9 @3 U
    Output: 27.26387596130371  0.4974517822265625
    ; W( n$ V! w! z9 H----------------------------------------------
    ! G% Z) F+ K1 e. I% x最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。' U* e! g. V. X1 L% G5 Y7 D
    高手们帮看看是神马原因?8 f' C/ O" b; ~3 j

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ( X5 d1 \+ Z# @  E) p# U7 ~8 X
    : P# \1 x- v! y, o) `, H6 u
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?! s2 W- I) O& Y9 Q4 H7 k
    -------& e# U8 Y8 R- o% g& ?/ N
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    / ]1 Y: R$ s& x$ j6 @2 _: A-------# D9 q( k5 L6 D( @3 i, j/ p
    算法诊断部分,建议把循环次数改为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:232 ~5 p3 P: O3 c# Z
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    3 C' ]. p9 \7 I2 n+ W, J-------
    1 f. y" |6 S+ x1 Y2 B; G不好意思, ...

    / c# \) e& K1 u: t谢谢,算法应该没问题,就是最简单的线性回归。
    ' @" p4 Z$ M0 u7 @我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    - S& q! r9 p% f. C3 `
    雷达 发表于 2023-2-14 21:52% M5 T  V6 B8 X3 M( m. T
    谢谢,算法应该没问题,就是最简单的线性回归。
    7 x, e- |0 g0 v: q, s我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    8 e8 K" `/ w6 X6 m, R4 m0 o  @- `5 h4 f
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。- h* V7 ]. \2 g8 q# N5 t  |0 a  _

    1 j# q- `8 h/ @) {0 s/ M3 ^! k或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 9 L+ t) w5 m! w+ h, k1 J* Z
    老福 发表于 2023-2-14 22:00
    / R1 O3 O# M) N% }刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。/ X7 Z- y+ m0 |5 N) n: g  s
    2 T5 |/ O3 I! z+ X* i+ ^4 r
    或者把b但的起点改为1试试。 ...

    & [* s& i" A( p% u, }7 Q7 R+ F7 z( C3 h# k
    你是对的。4 [5 s# Y" f! d% l9 r& t- C1 Y# W0 H
    去掉了随机部分
    7 V5 R2 G2 _6 Y' {7 E#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    / M4 e% K% T( t; X- Q6 Ky = (x*27+15).reshape(-1)
    / s, o  }; @7 w2 B( y- [" ^* d
    # k, Y3 A( @8 @* m循环次数加成10倍,就看到 b 收敛了
    ) n" }9 j- @. e$ jw , b
    . M  ?# b' V9 Y27.002620697021484 14.826167106628418! W6 D% J) C1 N- n* \3 q
    # O, l6 {9 ]5 J6 z
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-24 12:33 , Processed in 0.062165 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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