设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 + E; Q: J; U* G  w* L- }

    # V3 F6 N. f* U( k0 g. L为预防老年痴呆,时不时学点新东东玩一玩。& E1 Y( T) y* x" _# {
    Pytorch 下面的代码做最简单的一元线性回归:
    . @+ s8 ]6 B. g" `6 D; m2 U----------------------------------------------
    0 q& X0 m, O8 m' f3 S0 Uimport torch
    ; u- f2 ], h- ]4 M' W) M: Kimport numpy as np" }% R6 b$ m) q$ W. d* S+ R
    import matplotlib.pyplot as plt
    9 a% g- @* ?% ?% h3 @import random0 ?) F% ]2 z7 O" ]  S

    : W. |% H' y, t3 ]; zx = torch.tensor(np.arange(1,100,1))
    2 }- ^' A" d( J8 u" l6 Sy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    , M! Q( p0 i) t& s3 C7 u" ^3 b4 C1 i0 r0 v! @5 i$ a
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    & u4 P, e8 h( H. A) p3 n' Ab = torch.tensor(0.,requires_grad=True)( i: R$ o) }* U5 \* c
    & M8 O' t/ Z! E/ P5 N  [8 L2 D8 C2 d
    epochs = 100. i. n  ?  E8 l9 a

    % E$ p% {7 R0 A' i& Alosses = []
    0 y$ R  W1 \* N3 Kfor i in range(epochs):
    : l; Z; w) h2 Q' b/ ]  y_pred = (x*w+b)    # 预测) m: W; A0 [' U1 W1 |! j- n
      y_pred.reshape(-1)# N) m, D" c: Y6 z

    - Y* b( P" V% j& a% p  loss = torch.square(y_pred - y).mean()   #计算 loss+ \: [6 X. _; \- S+ f# u. J
      losses.append(loss)
    " H) U' S0 b2 v, E  
    ) o, u+ N& t  I  loss.backward() # autograd
    7 }+ M( n0 h9 K. f5 }3 G8 z2 L  with torch.no_grad():5 i' G; H  g% v3 B2 y1 h9 I$ V
        w  -= w.grad*0.0001   # 回归 w6 _' S6 f  w" |1 f/ \6 {0 q
        b  -= b.grad*0.0001    # 回归 b
      z3 a, m/ W& @% d  w.grad.zero_()  . m# B. \5 o" w$ d+ Q$ W7 K
      b.grad.zero_()
    & |* _5 K4 J, {+ J$ f5 p6 q) ]" a2 y
    print(w.item(),b.item()) #结果% v( v$ [3 e$ m# ^( _- z
    * ?( l" V5 u: [5 n6 p' f; x$ d
    Output: 27.26387596130371  0.4974517822265625
    ) o4 |! u( U; V& U/ }% @! B7 |----------------------------------------------5 v( C9 ^. [8 d/ b/ |! Y8 [. e- H
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。6 ~! A7 B8 k4 [- e
    高手们帮看看是神马原因?6 g! \! I! Q) _4 }0 w) ?

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 0 ^9 L. X* ]5 U2 K: r# |9 Z- i
    , Y8 {# _* i4 ~; z; W+ r) s
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?: D: t. Y+ S. g: ^/ q1 j2 s8 F
    -------1 A4 d, ]$ r" a' H: ~( o1 I
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    8 W3 S  m+ f- H) q, Y-------9 |+ O- a. v- i# W% j6 `! 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:23+ ]1 a! W1 O, `1 b: I: ]% G
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    " e7 U6 R8 ?  V0 J-------4 G, w- j% `" k0 _% C' r
    不好意思, ...
    + x  j$ j; t4 t1 V5 h! ~
    谢谢,算法应该没问题,就是最简单的线性回归。/ w0 z& A: Z! t( p* m' |# E( f3 d
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ! ^0 v2 {0 X1 g/ s( z) A0 ~  d
    雷达 发表于 2023-2-14 21:52
    - ~0 Z5 L4 i( x" o3 ?谢谢,算法应该没问题,就是最简单的线性回归。
    9 B! H9 m7 {( Q" w! C: `我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    2 H- R( H+ h4 p
    # F: J6 D. s( j
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    * w! x0 w9 @8 z$ g
    7 W  E5 H) i, C7 E9 k$ W8 i或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 ( X  p; `. F* [) y$ q
    老福 发表于 2023-2-14 22:00! ?& }$ P  D( C# M
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。" K9 T% o  E" z# V
    ( f' R( s9 v; ?/ z6 Y2 t  ?" e
    或者把b但的起点改为1试试。 ...

    / B) R# R. l+ D: @
    + O. O- ^  H- Y) b你是对的。
    8 ~0 \- r3 C9 F2 i2 o! J4 G& M) t6 u去掉了随机部分
    , k9 ^( q. B4 E#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    & e" B3 ?* @- T5 B$ n0 ly = (x*27+15).reshape(-1)  L: W1 U1 M* e( J; K& @6 }( P6 v

    3 l  t, Z0 F3 a. w% Y: H循环次数加成10倍,就看到 b 收敛了
    7 r. U% _  U% S* {$ |w , b8 [7 v2 j" @7 J, @" g5 Q
    27.002620697021484 14.826167106628418
    2 L" r5 ?' C* Q0 g8 c/ f1 Y' \% b
    " T9 a2 N1 y: _# d和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-14 13:44 , Processed in 0.057530 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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