设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 . s- C, K2 A5 l8 W: E7 I8 n: q7 i
    ; q# [7 m' B: t/ Z# I1 e2 c2 n
    为预防老年痴呆,时不时学点新东东玩一玩。( T: u( z3 \' t8 ~' B3 L, d
    Pytorch 下面的代码做最简单的一元线性回归:3 s4 d8 V% |4 p9 t6 C
    ----------------------------------------------
    . K! d8 V  A4 f' u" Kimport torch0 t0 G. c- }# e5 T' r' Z9 F
    import numpy as np
    2 @6 [" |2 x) B9 D# i# g* A( z' Aimport matplotlib.pyplot as plt
    & ?$ m# d5 \/ S9 o0 ~% ^import random
    5 C5 U# r" T) V6 m  v5 f/ ?9 Q) D7 T- a; T, ?; d4 {  C+ R
    x = torch.tensor(np.arange(1,100,1))
    ' b& E4 H' ^$ v* Yy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15: U( r: {/ |) j2 s

    2 J& K2 ~, I! ~  `6 y- L# T% }" W, f* Qw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    9 T3 N1 k4 p( `3 `4 Gb = torch.tensor(0.,requires_grad=True)5 R, I! _, h; @! }

    * }+ |! b& v# Zepochs = 100
    1 R2 H/ Y  O- O) W; G7 B
    : L9 L( j4 G4 mlosses = []  M8 Q# Z: }5 F5 K) ^8 s' Y, W( ^
    for i in range(epochs):8 T: j# R3 {. Y8 m! z4 H$ y
      y_pred = (x*w+b)    # 预测! P4 o* O( ]& S' O6 h8 S1 t
      y_pred.reshape(-1). c7 W: w5 i; k* y! |# |3 Z

    ) q2 A0 Q( }/ q  loss = torch.square(y_pred - y).mean()   #计算 loss
    $ H6 \) U3 E" A, a. D  losses.append(loss)
    ! G8 R( I( D5 R$ d) b2 ^+ Z( @) U  
    6 b( x# D7 q. Y% u2 N; z3 |# z  loss.backward() # autograd
    6 f, T1 B- x1 F6 ~6 _  with torch.no_grad():. n2 X9 }7 Q; S1 f2 }# R
        w  -= w.grad*0.0001   # 回归 w
    ! J- {" ~7 u* M* D: R1 ]( [    b  -= b.grad*0.0001    # 回归 b 2 m  L# q. N2 a2 m: _# d
      w.grad.zero_()  
    . u" s1 C& @% S! ~- J0 r  b.grad.zero_()
    * X$ K4 g4 o* c3 m; L4 @0 Z
    ; P# n& |* \. ]: Pprint(w.item(),b.item()) #结果% f+ J' A/ C7 R- X8 w- S
    1 {4 y" Q; L+ k6 m
    Output: 27.26387596130371  0.4974517822265625  }2 x' _1 Q% f$ h( z/ K. q) M: e
    ----------------------------------------------
    ' ^9 ~% a% @$ N- T5 E& o$ D0 H0 q" p最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    # Q3 u  C! K$ ]$ G6 M3 r高手们帮看看是神马原因?
    ( J. }5 Z/ z* ^. o. G

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ) `; R1 a) ^, p5 g  A- L( ^+ r! k3 c7 U- G

      W8 K/ x/ U% t; t+ O没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  i  k! c' e" q% P) [
    -------  v3 ]- f* ]' y6 K! @
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。( x: {/ c  w- t3 b- @, Z. U
    -------) f( z1 w( u: ?) F! j
    算法诊断部分,建议把循环次数改为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, j, d0 N4 d: G; n% m
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
      n7 K0 e! H0 I6 c( K- w5 y5 I  T-------
    " }+ y) X+ \7 w; f2 V7 u不好意思, ...

    " s" Z8 W. S1 l$ r' h, t, Q4 |谢谢,算法应该没问题,就是最简单的线性回归。
    ' e0 l# D7 B! o/ a" C; R我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 : x8 A8 P- {1 z( n  ~
    雷达 发表于 2023-2-14 21:52, I0 A6 b- x  i8 N" R9 X) R" N
    谢谢,算法应该没问题,就是最简单的线性回归。
    7 m0 u$ d) |7 g我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    * H0 g3 J4 [0 M& j; M7 X
    6 Q0 W+ \( C# M& p7 w& \7 W$ |刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    % M. v- i+ f$ F+ u  b1 ~6 m9 J4 j2 \8 n6 u# {& k& \& S3 C
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 7 [1 w) U2 X# e1 S  G$ U7 J
    老福 发表于 2023-2-14 22:00
    0 X1 Q) p8 n' W" U+ d& a1 w刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。; t* B& n* R# O6 ~5 a" Z
    ( D& \; d( v* s1 K
    或者把b但的起点改为1试试。 ...
    5 v1 h6 {6 s. ^
    3 Z: ]8 w6 \: f7 K5 [) U# j, Q
    你是对的。. ?/ P& e: t" b+ B$ h/ w4 v. I6 N
    去掉了随机部分# I) t0 z9 |' @: c  L: E
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)! v. c  c. j0 |
    y = (x*27+15).reshape(-1)
    # K- h5 \$ J0 w1 b4 s
    6 J# a; _; g  O. i5 Y循环次数加成10倍,就看到 b 收敛了
    / [4 x8 k; s6 S) p) Jw , b; {! J# A5 Y1 m: d# w$ s! {
    27.002620697021484 14.826167106628418  \, i9 s4 L+ P$ M
    * T. x( E- p4 O; Q! C- o
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-18 19:39 , Processed in 0.032215 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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