设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    0 H( f) }" i$ D8 W( d' X8 m6 |
    ' C$ Y0 F9 m' r0 A' {8 K为预防老年痴呆,时不时学点新东东玩一玩。
    8 W0 [& I3 l: ~) yPytorch 下面的代码做最简单的一元线性回归:# L6 F! a6 C8 Z0 R  D3 [
    ----------------------------------------------; p* e( X) ~( Z/ ^; t3 r+ ^
    import torch
    : o5 c, D. C6 r; E" Simport numpy as np# d& [& k( Y* p* o' }8 }6 B/ n4 g  R3 w
    import matplotlib.pyplot as plt
    1 L  T+ c1 r5 W) @' X7 c& A' uimport random+ ~5 S! K3 u- n
    3 b/ L. Z7 d: v* i/ b0 C+ l
    x = torch.tensor(np.arange(1,100,1))9 T: j: J8 ~* A* k0 u8 Z9 B; P
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15% @* J5 f/ C0 y

    ( c* T( I7 s' c4 Q0 n+ M& a- K% Aw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    9 V& m- m4 @1 t( w/ e/ C4 gb = torch.tensor(0.,requires_grad=True)
    3 F% {) i4 g2 J0 t4 R; H8 A6 [- v+ x. K" ^1 N% n& d1 T% b
    epochs = 100- p2 x" A8 ?& E$ I0 F2 W. {$ j, M
    % g% V9 T5 k$ H( O9 Q
    losses = []
    # R; W, q" U0 D" E) Cfor i in range(epochs):5 q& S4 Z6 @: c% w- @1 B" Y
      y_pred = (x*w+b)    # 预测
    . l' O* B6 j9 z- F0 X, H  y_pred.reshape(-1)
    2 l3 b) \! K) ]$ r) @
    5 g7 N/ z$ S2 n5 x4 |  loss = torch.square(y_pred - y).mean()   #计算 loss
    " P" }7 w9 u$ }2 _5 K) M- k0 q2 I  losses.append(loss)
    6 N, `* X% J2 }$ `/ Z; v  
    / I& c2 Z! n1 g) U  loss.backward() # autograd
    2 d! ?9 c7 V- ]  N- y  with torch.no_grad():
    # G3 j) {$ ^$ T* V    w  -= w.grad*0.0001   # 回归 w8 E  y% E/ U" \$ \$ S* A
        b  -= b.grad*0.0001    # 回归 b
    0 M3 [* `7 R8 a% x  w.grad.zero_()  
    : t) K( k/ n, q; H. X  b.grad.zero_()
    6 v6 a( ]4 R; G7 M* Q. l! ~8 S2 c: e9 Q! E5 I; p
    print(w.item(),b.item()) #结果& l) P1 J0 K5 d; e5 L! D7 I
    4 f9 N* C- z, `, H5 v6 v$ K' j
    Output: 27.26387596130371  0.4974517822265625
    " y) ?- Y5 j5 c1 t3 j2 b" q' E----------------------------------------------
    ) A( O* z0 `. c+ Y9 U& Z最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    $ X0 f3 @2 S: J* d9 F6 s- l高手们帮看看是神马原因?
    - ^" t0 E% {. K& v) z

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    , J: P- p4 r: u5 Y6 Q! d, u: o3 I0 x# S7 H
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    6 e* X" Z2 t" \, {+ n' h5 h-------; O0 t# ?" _8 N1 P; y
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    5 K: P. B5 m) X8 ~-------
    $ G8 C! g( A7 b% B算法诊断部分,建议把循环次数改为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
    * k7 c( A' c! ]6 l! v% m% i. S( Z# q没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?; p4 T0 j8 n$ q$ N% {
    -------
    0 @& }$ N+ a; u" T, q6 q+ B不好意思, ...

    " N* d( Q  w  S; x9 }) t谢谢,算法应该没问题,就是最简单的线性回归。% P8 C# H' S- h! Z. D/ V
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ! M1 c$ \7 n5 L- Y/ U7 W
    雷达 发表于 2023-2-14 21:52
    : j2 J7 m7 \( U, u% A: B  t6 n* v谢谢,算法应该没问题,就是最简单的线性回归。
    ( D  Q$ T9 X$ y! U& H' n! s我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    & m, v( ~/ S; x! Q/ x( o2 W

    + b! u. H/ ]/ e4 [刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。" y0 K- z8 o! K3 C! m/ C0 u' Y

    . m7 C8 g! T9 ]. M6 E或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 * F5 ~: ?/ O7 @1 }5 K/ ]: a/ }* i
    老福 发表于 2023-2-14 22:00
    $ [" l3 F0 |& \刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    4 ~* |: f: b6 m' P4 U" q# y  s) |" M- }' U, T3 @
    或者把b但的起点改为1试试。 ...

    ; B- @9 t8 h( e2 L: G* N- z' }
    7 Y' U$ t, J  x% u! R你是对的。/ s, ^7 n' \9 }* \) q* K
    去掉了随机部分
    1 x( G/ o% k* E1 W  p; Q" U2 o#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    - ]6 q3 e6 A3 y) }0 Q- \y = (x*27+15).reshape(-1)
    + d3 J, a' {; A. |" c0 I4 [9 M8 O
    循环次数加成10倍,就看到 b 收敛了
    & C9 Q3 o4 W: a7 g  m" m# fw , b. a4 `: D' k6 b1 @* T2 ]7 E
    27.002620697021484 14.826167106628418% e5 y' ^9 E1 R7 |/ E5 E$ ?

    6 |# p+ r# N3 H. v  N和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-19 14:08 , Processed in 0.057953 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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