设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ! I) P" {% W* a4 ]

    $ J( n! ?; n9 L: j) f为预防老年痴呆,时不时学点新东东玩一玩。% @1 U- g: w/ G1 ]/ @
    Pytorch 下面的代码做最简单的一元线性回归:
    & d0 ~+ L, S& d. P----------------------------------------------' R3 R- H  \( U  r# @1 q; L& ~) F
    import torch) d7 a7 R5 \% o, D. S% x3 L/ d( o
    import numpy as np
    * c; g& |* R+ X+ G. Uimport matplotlib.pyplot as plt
    : \, R  v" r7 `+ a  j) h, P& _6 Uimport random. v; s) ~  }9 c5 ~
    ; w- M% ~; \' V2 K, N. N
    x = torch.tensor(np.arange(1,100,1))4 A6 Q4 w5 h' K
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15, M) e$ L, P) j+ j
    - }, z" N- A, ?- F& }
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    0 h' t$ ~: Y% w# P0 C% xb = torch.tensor(0.,requires_grad=True)
    ' S; p+ p+ o+ g3 a' w3 T( \9 K9 v* d' @5 }7 Y0 w1 u' g
    epochs = 100: S# U2 j. w) J

    % j, S% n' g9 u- l5 C6 N! blosses = []
    & S! y0 Q( j  |) I7 @for i in range(epochs):  x& J& ^. ]/ J$ ?8 N- ~
      y_pred = (x*w+b)    # 预测
    ( S9 R+ _5 a" z0 j9 f  y_pred.reshape(-1)
    + i8 _( K$ N  L6 G
    0 D( ~8 @; o+ y* {9 f  D4 R8 n8 y  loss = torch.square(y_pred - y).mean()   #计算 loss
    ' q* O( v( A! w+ n7 t; O  losses.append(loss)
    ! A& c1 ^% _6 t. U  * U/ q: ~$ G& h8 q9 G& \' U
      loss.backward() # autograd
    0 a$ u6 k4 v5 Y. W  with torch.no_grad():0 Z# d. y% [: ?$ B, U
        w  -= w.grad*0.0001   # 回归 w; {' l. B! t- b6 [9 k1 L
        b  -= b.grad*0.0001    # 回归 b 2 U. B. ]. ]; N% Q
      w.grad.zero_()  
    6 |: [7 H. k+ x' g7 }* h  b.grad.zero_()' O* J% |& G7 T- c) J" h

    * \6 w, \- f4 s& C( i3 q; q; @print(w.item(),b.item()) #结果3 z& g/ {/ n  o2 a  S
    / x# `$ D5 l+ t# z! M% L
    Output: 27.26387596130371  0.49745178222656257 P* J9 ]( J. X8 z4 T+ U
    ----------------------------------------------
    1 m) g" h- @- x& V最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    * B  ~- N. V7 \' [7 c高手们帮看看是神马原因?
    * I* D" v: E" Q' s$ b

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    " m* O3 ^8 S" g7 @1 J0 K- l. [* [' {
    % y0 D6 H; |7 d! a没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?$ G2 |9 J4 X) G
    -------
    5 Q2 s  p. X! D& i不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。9 ]* A' y+ s1 C/ c; z7 f
    -------, H6 ?( ?% s1 k' D7 D! ^
    算法诊断部分,建议把循环次数改为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% @$ t5 U. F3 }3 G没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?; ~) D/ X+ N, p. ?
    -------
    7 ?6 _# ~6 `4 x  t2 B+ @6 w3 @# y不好意思, ...

    + N# S& Y2 i* K' o$ n) U5 D谢谢,算法应该没问题,就是最简单的线性回归。
    ! Y1 l( I9 f2 c我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    + w4 _5 k$ x/ ^6 p1 ]5 a) f
    雷达 发表于 2023-2-14 21:52
    $ S1 ^5 _4 @9 J" p& _% N& Y谢谢,算法应该没问题,就是最简单的线性回归。  ]$ l3 H* S: T+ I  i
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    ' J" P3 \0 c. q: \5 u! H

    1 y( V. B0 \1 x& {" Y刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    # C. B) T6 ^' L7 T5 ~
    ; N% ^+ s, v3 L; L; P# M6 p6 S' ]或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    & k& t; r/ ~7 @) B
    老福 发表于 2023-2-14 22:009 S# ?1 P) |* l* H5 ]6 B7 k4 Y- Z3 H* `
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    # `# G/ Z* }* k+ U; V) }$ ]% b
    6 ?& V: Q- z" Q0 u5 E+ h! e或者把b但的起点改为1试试。 ...
    3 Y9 S# g( e" z7 d# n

    0 c  Z+ [4 c% e1 D# w& E你是对的。
    4 B% C: d4 r( `% U6 B1 w去掉了随机部分* o. S4 S% I. K& T
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)# C# d; P5 W. f9 _$ W; K4 d
    y = (x*27+15).reshape(-1)
      m$ Z" k) U; k5 a4 m0 d& J. K8 s
    4 J& k+ p) [! v4 J/ D8 W" X8 Z2 e1 v2 i循环次数加成10倍,就看到 b 收敛了
    $ V3 I0 f( m- Z1 ?/ X0 l0 [$ x, Xw , b( D; h6 t# A3 G
    27.002620697021484 14.826167106628418- _6 C/ P9 l- r; l6 \* c7 s. c
    3 s: [1 X% a! M# O9 Y4 V4 M* ^( I+ b
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-23 13:54 , Processed in 0.056008 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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