设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    " x9 f* Q- y  ]" v9 }/ ~
    5 v% C+ N0 s$ y为预防老年痴呆,时不时学点新东东玩一玩。8 s" X* p: X* ?
    Pytorch 下面的代码做最简单的一元线性回归:
    * V9 H2 @7 Q% H- l, d----------------------------------------------
    : @( i% X1 H+ q8 F+ j, H6 r( L/ v6 limport torch& V2 ~1 C1 J4 \7 |7 z$ G  r6 d
    import numpy as np, e# W$ F% b6 O9 l
    import matplotlib.pyplot as plt+ i4 g1 v- o# w0 T0 K% y1 q; S9 N- t
    import random
    : g8 K# {# v0 b7 |$ W: Y( x8 Z5 b7 I5 \5 M& r* Y
    x = torch.tensor(np.arange(1,100,1))
    - H/ ~$ F' y0 O5 \! H; r  |y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    9 F/ i3 X: B* }' T, E. X8 ~$ y9 f" `5 Q1 [2 D
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    5 i# R! w6 N8 w$ kb = torch.tensor(0.,requires_grad=True)+ f/ v; T( _7 ~7 Q' ~# w6 @
    ; x' B( e; O5 ]9 g
    epochs = 100/ `7 r9 b4 |8 w, a

    $ Q6 a8 d7 e2 u, m& ~5 L/ closses = []
    . m2 ~8 L- ~1 a, tfor i in range(epochs):
    3 O1 q9 [% g( `5 t  y_pred = (x*w+b)    # 预测
    2 ]1 x4 M. o7 D/ {  y_pred.reshape(-1)7 c& q9 I+ H) y8 o4 {+ F# i4 q  t

    9 X# N7 h# m. Q+ B* W, g  loss = torch.square(y_pred - y).mean()   #计算 loss
    ' a- z" l* ], j# r7 L$ r+ |4 D- S2 z; c  losses.append(loss)4 F4 |. a  j& q& r3 ]
      
    % \6 V( _, t) g- n; J: L6 M" ?- g& d  loss.backward() # autograd
    9 @  D6 {* f6 X$ x) D: u/ M0 {' ?6 p  with torch.no_grad():
    ; t) h3 |2 |3 M' K0 \- x    w  -= w.grad*0.0001   # 回归 w1 R/ {$ t4 E5 U4 b
        b  -= b.grad*0.0001    # 回归 b
    ! q0 i  @) E( h+ ^2 |$ k+ b" i  w.grad.zero_()  
    # r7 V4 R8 g3 N9 G3 U  b.grad.zero_()$ C0 j7 ~# i! n, ]9 N" r
    & X9 H* M/ ~4 A0 ^" q! i( `
    print(w.item(),b.item()) #结果
    % z( k8 c! j9 L) d
      n; d6 J* M0 v9 fOutput: 27.26387596130371  0.4974517822265625  X, A6 W  F5 T9 ^- n9 m
    ----------------------------------------------
    9 F' K; G& @. r! |  y* f最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    1 G1 z; X. @, n! ~/ S; i高手们帮看看是神马原因?
    ! v& B) U# ^+ l7 B2 ~

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    / x. v8 e6 L: r7 {3 A, M5 ^: ^& C# |  L' G3 d! ^
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    " r" f3 p* O  F8 A: k' R% a( P-------
    : _& ^9 B2 Y1 ?4 X: H7 P+ b& A不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。( S* o8 V8 b! u0 G: d/ k0 X+ @+ I6 b! l
    -------  n$ `( ]! U! V$ G
    算法诊断部分,建议把循环次数改为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
    # _! Z. E* U8 j+ C, |0 X没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?7 c9 L5 e: Y, q# X
    -------
    + Y4 O4 T2 @/ E6 g不好意思, ...

    * D9 Y( d# e: ]5 }; w8 w7 a% U谢谢,算法应该没问题,就是最简单的线性回归。
    ) s, w8 z  {" }" _# r  v我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ( Z0 Q0 t5 G9 `5 \' M* Z7 |: f+ B
    雷达 发表于 2023-2-14 21:52
    7 v2 M, z5 R  g3 b4 Q谢谢,算法应该没问题,就是最简单的线性回归。" C: s+ V/ _1 A1 P
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    - @" t, d3 Z' }) v3 }+ z2 q! b% r) U& i  T" b
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。% F6 a& \/ a* K0 b
    5 P0 n/ X* q# _0 Y% `
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    4 m. K, C5 X7 }
    老福 发表于 2023-2-14 22:00
    " _8 I+ o( I2 R/ L3 O$ L刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! }; Z3 }; w# u6 k) C, l; k$ F

    0 g( Y# q/ c/ _! q% Z; P或者把b但的起点改为1试试。 ...
    ; g/ {: j% A& B9 t

    9 L8 ^  h5 w) r7 @你是对的。
    ( l( b( u1 R0 k/ ~% w( r. K6 z/ |去掉了随机部分5 x6 Y6 i. R3 `+ `+ G, L; B, O3 M+ n
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    ' U- u5 d7 f' F( W  @% k6 Uy = (x*27+15).reshape(-1)0 m' }: ~6 {$ m  w0 P+ b! x2 Y
    8 l( }- |1 u: F+ d/ T' H* ?9 v
    循环次数加成10倍,就看到 b 收敛了
    8 A" e" s5 T0 v7 }w , b$ u1 T$ W2 e# {  t& L* U  u0 T
    27.002620697021484 14.826167106628418
    ! J4 F9 h; I- g7 s1 }; x2 ~
    9 A3 e% z0 S! q3 R( Q& B和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-3 19:49 , Processed in 0.060242 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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