设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 . P) E3 Q# t) W4 [
    7 b! D) _7 j, U8 l/ a! n/ E. T
    为预防老年痴呆,时不时学点新东东玩一玩。
    8 Z  L( b" W8 F' j4 F0 ], `8 r) tPytorch 下面的代码做最简单的一元线性回归:
    5 E: m! x/ T, Y+ u7 C----------------------------------------------
    7 i! M' v- U1 j* gimport torch
    0 j. \7 J$ {( Z8 M) l3 b1 timport numpy as np" [% F9 Q' v& w) r" |  K- @
    import matplotlib.pyplot as plt
    1 ]% f5 z; A  w) ~4 r0 `( Eimport random
    ( a/ C' S) U' L
    * A+ K' u. y- \' k$ F2 Z2 N8 H2 Jx = torch.tensor(np.arange(1,100,1))  R7 l/ r% W' j" `* r! h' W& _
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15+ _1 ~8 J; J* {0 _
    ' @' H& L5 m. {0 L: n
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b/ G* x4 A& q" K$ Q- H
    b = torch.tensor(0.,requires_grad=True)3 d0 O3 d* Y& t5 h# A
    ) S" j6 \0 F/ ?" ~
    epochs = 100
    ' @. r6 Y) L3 \, z/ R
    2 j9 l1 E  [1 W9 p2 K+ c+ Qlosses = []6 ^  `* [. I  R9 i
    for i in range(epochs):6 G8 X* e- E0 v3 T6 X
      y_pred = (x*w+b)    # 预测) o2 a8 A/ T$ Y( B! ]6 Y1 E0 G: I& I
      y_pred.reshape(-1)+ ?* {8 }: v5 F" @/ ~" z7 e
    4 j$ c. a! v, V8 p) i8 g
      loss = torch.square(y_pred - y).mean()   #计算 loss, K) x! }' g1 _: i7 R* U3 H) f
      losses.append(loss)- m" p# K/ X- h" @
      8 k: U/ b2 P7 F  q5 B: P" B2 d) P: b
      loss.backward() # autograd
    5 ^- W, {" w' e7 L  ?' _  with torch.no_grad():
    # t- |7 _2 G4 L, s    w  -= w.grad*0.0001   # 回归 w$ g, n$ y5 w) H# J" G: \  v* d5 |) y" _
        b  -= b.grad*0.0001    # 回归 b
    8 w; \$ f9 k2 @% k; x1 {, I' d  w.grad.zero_()  
    " d4 j. {6 H6 J; a& k  b.grad.zero_()4 c& Y, i8 a8 n) I) X
    ( A1 s7 m0 ]: v) l: h3 H
    print(w.item(),b.item()) #结果2 V* z# u# @* D1 e2 g2 Y* f

    . t; v; Y# R) B! hOutput: 27.26387596130371  0.4974517822265625
    . H$ X0 G3 H9 F( e----------------------------------------------
    / h$ h: v1 a1 c" p最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    0 ]* }, A2 h) W; f高手们帮看看是神马原因?0 I' \4 x* t0 ]* t0 `

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    * @% K1 S  k: ]; t" ~7 G% s7 ?: K# ~: M9 b
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?! i+ s6 ]6 {/ `2 Y/ F% H
    -------
    5 ?& q, j, w, D2 Q* ^) V$ c不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。) W9 D1 l' |  M+ U8 h; r8 V
    -------
    ' j" L! C  O7 X( P4 d( t' V+ A算法诊断部分,建议把循环次数改为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& `: ~- Q9 {8 }
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    8 Q) V5 a' L2 B' ?* w7 s-------
    2 K9 H  }2 ^, p; D0 r+ _不好意思, ...

    ' c( g2 T: [9 y3 T- J谢谢,算法应该没问题,就是最简单的线性回归。
    : `9 I4 v- @5 i+ u3 b我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    " V8 f, Y3 Y: Q9 H3 Y
    雷达 发表于 2023-2-14 21:52& m# F; a* z6 k+ J% m# Y& l
    谢谢,算法应该没问题,就是最简单的线性回归。
    # H; X* q! f) t3 h% ?" ^2 C* ?1 o我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    % ?! \5 E( C6 \4 t8 M7 k
    % R' [0 y# H, G2 K' B  v" n: T刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。/ F! m! `- z. R' c7 n1 `

    / F2 G+ K) v. \  b或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 : X9 ~6 j. g. \% p/ u0 T
    老福 发表于 2023-2-14 22:00. V4 C9 M- M$ ^
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。; d% ]% |  T; J/ }( O4 r

    $ Z" ]' I& {! i3 z: y' J8 T或者把b但的起点改为1试试。 ...
    : {3 ]0 E2 j) s+ [2 g# Y* D7 X

    ) F8 |% U- I3 b你是对的。9 F( D# ]6 R0 P! _$ p
    去掉了随机部分
    . D- g7 e: c( @6 y" l#y = (x*27+15+random.randint(-2,3)).reshape(-1)/ P# y4 F4 ~5 `) Y
    y = (x*27+15).reshape(-1)
    5 C/ b) Y+ P6 i4 W1 I3 U. b* C2 R- I1 G3 s3 b
    循环次数加成10倍,就看到 b 收敛了
    ( v4 i9 I) l# F( ~; D2 ~w , b
    & S) o, F6 e# S- {- @2 z7 T27.002620697021484 14.826167106628418
    & t# E, a5 E' p1 Y! T, K  G: E( m& E7 S" Q0 l/ m( p  }
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-29 18:30 , Processed in 0.028585 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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