设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 1 Z: ?# Q% @$ E3 R
    ) }2 x. @: {! q3 E9 }
    为预防老年痴呆,时不时学点新东东玩一玩。2 _! F1 {! N9 Y2 q$ B5 z7 i1 N
    Pytorch 下面的代码做最简单的一元线性回归:: P2 B8 `" ?! K3 B
    ----------------------------------------------5 T& c5 \/ O: E. Y
    import torch
    * m/ @8 _" o! p6 Oimport numpy as np
    " Z1 r0 H2 M+ g5 g6 l) Rimport matplotlib.pyplot as plt
    & z4 ~8 A2 H* U3 `% C  E0 E$ jimport random; i, C0 X5 i7 W) U3 Z$ u
    ( `) b+ W/ z/ Z' q7 @
    x = torch.tensor(np.arange(1,100,1))& y2 ?5 }& X2 d) i$ i
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    . [) T( T5 k( f: h5 ~
    ; x5 h  `) j' Rw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b0 E- q3 s3 t4 z2 h( S
    b = torch.tensor(0.,requires_grad=True), m  s; P4 Q) y
    + Y1 \! s9 q- t# i1 v* |! s4 W
    epochs = 100
    ' `) U, s& E3 h7 s0 P2 U* R! v& z% x0 F
    losses = []; V  S: o/ R: ], h' V) u- Q7 E
    for i in range(epochs):
    # p0 S5 ]2 ^3 S# u  y_pred = (x*w+b)    # 预测' X/ ~; Y8 y3 I" e: x
      y_pred.reshape(-1)% S) i) n. O. m" G2 N3 b

    ! u& `$ C. G1 O8 ?. m1 h  loss = torch.square(y_pred - y).mean()   #计算 loss
    : x- h* P& n: v4 Z& b: F  losses.append(loss)' u: d1 q7 t% e; r: }
      # l& v+ C$ W+ W" S
      loss.backward() # autograd; z9 c; S6 n: Z  r  U3 i
      with torch.no_grad():% j0 r8 C( o+ p! k9 ]  I  F
        w  -= w.grad*0.0001   # 回归 w
    3 [0 u) E# D5 s' F1 b: m5 z% _    b  -= b.grad*0.0001    # 回归 b
    + W, X$ m7 }+ h* ~- z7 R  w.grad.zero_()  
    % L" h# Z4 K$ T6 k1 Q. `* Q  b.grad.zero_()& x8 M1 h4 j# {* S" t- I' D
    3 W  k2 E- g- O) d
    print(w.item(),b.item()) #结果
    1 w% C" x3 k$ t: s1 k  f8 F/ d! }+ ?
    Output: 27.26387596130371  0.4974517822265625' |% ?" Q: Q  S  b
    ----------------------------------------------
    ) B% }! i- Y# }. `# Y; Y最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。, v& C4 m" t4 V( l2 M, Q. ~
    高手们帮看看是神马原因?
    # e' X9 O* V( f5 K8 i( N1 {

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    ; B, d# z) x- w6 B: f% n- E6 [8 P7 O, q9 t% e! V
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?$ v: q# g; k. V" n7 S( J) l
    -------
    . g. P! v- J2 |1 Z, F不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。* ?$ |) N3 O9 |' }4 \- S+ ~
    -------
    0 T9 L! ]$ H& a. [' j6 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:231 Z$ Z5 e8 f* D& [  H0 J- D, W( e
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?% X" O1 R0 \1 n% [, ~/ d2 u
    -------" u4 C0 i0 A0 c" i* ~" K
    不好意思, ...
    - A2 r( J# N7 v
    谢谢,算法应该没问题,就是最简单的线性回归。
    $ I2 L8 g7 q! i: [/ N我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 0 {+ R) E) U6 s# n, ^, ?
    雷达 发表于 2023-2-14 21:52
    6 Y2 B) x0 J0 A8 k5 i谢谢,算法应该没问题,就是最简单的线性回归。
    6 P9 H& ~$ i% y我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    5 Q. @; C  b) M3 x
    % g& _9 y. {+ C& Y% R" G" L. Z
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。$ v% \8 y: ~5 v1 c$ u

    $ S2 ^, P! O- |5 J8 G3 f* W& F% ?或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 , E2 E- k& Z- N- u& Q. f
    老福 发表于 2023-2-14 22:00
      ]( P' @" W' G* |# V! I刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ) U$ \" W- H( s1 Q1 e
    ; u! I% r8 R: B9 [' q或者把b但的起点改为1试试。 ...
    0 w: h9 S0 k) b4 O) A+ G6 N. q
    6 G, ~; x3 S, P! O3 W  D' @, Z8 J
    你是对的。7 |7 x$ F% v" G
    去掉了随机部分
    ' W" P& g: C& s/ U#y = (x*27+15+random.randint(-2,3)).reshape(-1)+ D8 ^! J) b& }( A( B/ ?* G
    y = (x*27+15).reshape(-1)% B0 Y; w, e  U2 S) F
    9 P* X. D, C5 p, O% F
    循环次数加成10倍,就看到 b 收敛了- d8 Y& y3 V+ a* H. t5 P
    w , b7 U. h% y7 p/ w; }" o
    27.002620697021484 14.8261671066284185 k, B) k4 ~8 H
    ! _; c% k( r$ |
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-2 22:40 , Processed in 0.067641 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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