设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ; c. ~2 `3 C8 f- M- @
    1 P8 b& e' U$ H8 O
    为预防老年痴呆,时不时学点新东东玩一玩。* ~8 V" |) z7 `
    Pytorch 下面的代码做最简单的一元线性回归:0 |! B4 j5 N0 p! e
    ----------------------------------------------
    2 K* p7 g1 i) Y& R: nimport torch; j1 \& C' n6 @, g/ H# @, v
    import numpy as np
    & z4 F; [* |. f5 u+ n- v0 J, Ximport matplotlib.pyplot as plt
    ' ~( t" v) U( J7 z9 H6 qimport random
    & Z+ a% a8 q' C/ o" h
    , h2 k2 L/ ^' O, A8 n' J8 L" ex = torch.tensor(np.arange(1,100,1))3 w- S. H1 G- T) L: l# I: e: J
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15% ?4 [5 I& e* F5 C% B( }
    # L# }' c" F  ~+ N3 V
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b& e# Y* o7 u* M8 ]7 Y' I
    b = torch.tensor(0.,requires_grad=True)* t' K7 Y& V7 N* w0 @

    ; o% h! [: j9 Depochs = 100
    2 L! I# }/ c# Q/ F  x- b0 m/ L. A' i" J
    losses = []
    ) J9 y# q$ p' Mfor i in range(epochs):
    8 f& Y: W# u5 F- }$ s2 U  y_pred = (x*w+b)    # 预测
    $ y0 m. Y& U+ T7 ?5 R' p  y_pred.reshape(-1)7 ], r9 q. o9 E. B7 {

    ' e- w* F, i" s5 r2 x) {( |2 t  loss = torch.square(y_pred - y).mean()   #计算 loss, R# A: m/ Y# J% W3 r
      losses.append(loss)" U% d6 R( x3 p: i' [( @3 }. W
      
    : z2 E! x# r  n1 V/ J) `, ]- q  loss.backward() # autograd
    ( i, y! u1 l& Q9 \0 s  with torch.no_grad():
    ! h0 C- u; v! D    w  -= w.grad*0.0001   # 回归 w- p$ K" n, N8 O& p- s* W7 j
        b  -= b.grad*0.0001    # 回归 b
    , h' v5 P  }+ ]( d2 s6 o4 D! _  w.grad.zero_()  
    * U" T/ c; \/ g1 R0 E! K+ M  b.grad.zero_()
    $ Q! o% A  D% s* ^0 B% U8 V" z+ u7 K. J  ?( p. Z1 K# A
    print(w.item(),b.item()) #结果
    $ p( N6 s7 Z4 R5 t5 P  [3 [  Y& B; c
    Output: 27.26387596130371  0.4974517822265625( F3 Q+ ~; [2 D7 B; d$ [$ J! P) d
    ----------------------------------------------
    4 P4 @- P! {2 a9 X2 \最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    9 H6 @" s' v  D) g; ]$ F7 k高手们帮看看是神马原因?
    ; E2 i2 N3 q" s  G9 B# Q9 }7 b

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 $ T% t( B5 f/ k. ~5 g& V

    $ Z; C- V. j5 u: v没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    # G0 B3 @# m" \$ X* ~% j0 ^-------+ @8 o9 ]) ?$ p3 I2 s
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。6 F1 [1 G. {# O9 L0 c6 u! `3 `$ K
    -------
    * l9 A2 d- n7 u算法诊断部分,建议把循环次数改为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
    + V" U8 {! T2 Y1 {+ `没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ( m% Y; M+ b0 l$ _-------
    ( C3 C( C( H* r' V4 c不好意思, ...

    - c9 z% E' W* @; L; \8 I谢谢,算法应该没问题,就是最简单的线性回归。! ^( M  z2 O, M  I
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 3 `$ g9 \6 L0 u& c' m* `* X
    雷达 发表于 2023-2-14 21:52/ @% ]' }9 P4 J4 X8 i
    谢谢,算法应该没问题,就是最简单的线性回归。  ~5 l5 J7 ?4 v" p
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    9 M" S' \: J0 B4 m) [/ x; L9 m' _2 [' s. x3 ]0 O5 F
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. D* m7 n$ Y# b$ @
    ! K, X0 ?6 Q1 M( e0 B
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 8 b7 j& {9 Z! ?, O3 C3 U6 q
    老福 发表于 2023-2-14 22:00. O/ d) `' l* C4 o, j
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ; S# Z; x7 v3 E
    + ^3 j, A2 ^  k' V" H7 x) X+ I或者把b但的起点改为1试试。 ...

    0 ?. z1 h/ O) k6 _/ Y, o+ H  l* I
    : k7 w. y6 g& t, a你是对的。3 G' G/ J$ C: Y, ?+ ~9 P$ }3 |
    去掉了随机部分
    1 i* @: `6 }# H# X. S- W. y# ?#y = (x*27+15+random.randint(-2,3)).reshape(-1)2 \1 N5 a# J8 H! r) @$ q0 J
    y = (x*27+15).reshape(-1)
    9 F' {3 K2 f$ O6 s; z/ t; q+ }& d5 ]$ i  S( i1 y& A" @# A. J2 R
    循环次数加成10倍,就看到 b 收敛了' h: b& H: D, C5 J
    w , b5 `$ o5 ~- u( @1 p% A
    27.002620697021484 14.826167106628418$ t5 f% g) T9 k1 h9 p
    ; k1 k& ~* f0 e4 Q" [  W4 [
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-16 08:00 , Processed in 0.056286 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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