设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ( t& b$ I" h5 o( G: Y
    7 R' j2 m" c/ Z9 R$ R* V2 I* l
    为预防老年痴呆,时不时学点新东东玩一玩。3 V; ]! H% X. {( @. M1 t8 p7 I
    Pytorch 下面的代码做最简单的一元线性回归:8 p' P5 L2 Q; y# J
    ----------------------------------------------
    , ~5 i0 ~* F3 F& [9 Dimport torch
    % u* V. n* ^, Y. R" F( mimport numpy as np! k  r$ k* l# j: o+ {  ]
    import matplotlib.pyplot as plt
    1 v. u9 H$ u2 N) R' R# q$ oimport random) \" q, u' l* B% V  p# P; M

    , a$ }8 ]: W! m- g4 W8 l+ J; U  Mx = torch.tensor(np.arange(1,100,1))
    ! [$ y+ y, O, m+ m, \# ?, Ty = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15, d: h+ J- i# _$ R
    8 O+ ~% Y9 x8 ~9 _3 X4 Z" [
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    $ H% X, V! ^% ?* b2 ]5 f% }' l( d/ B  nb = torch.tensor(0.,requires_grad=True)/ c) ]9 f2 K, ^, M, E- ^
    ' ?9 a* W4 G& F
    epochs = 100
    / [2 r) p  ~: Y5 ^5 c5 r8 p5 K* u' o/ H
    losses = []
    " f+ ?/ ^4 W! E, Qfor i in range(epochs):
    * K) Y2 r$ o( b/ e5 j( y  y_pred = (x*w+b)    # 预测
    , R0 g) G/ o# G$ D% C8 K; {  y_pred.reshape(-1)" b9 y4 o+ L' n) {2 s' }; M! ^

    5 ]7 S' }% D1 m* X3 N) S  loss = torch.square(y_pred - y).mean()   #计算 loss& v# Z6 W! l2 q2 @5 ~* @
      losses.append(loss)0 T. z5 L1 k* G' {  a$ z
      / w; o5 X: L5 g9 A$ p8 U( @
      loss.backward() # autograd- `" J3 s( T5 V; a+ G9 u
      with torch.no_grad():1 F" K& E; S  i, b" O# {
        w  -= w.grad*0.0001   # 回归 w
    - i$ e4 @% }& Z1 l2 p, K    b  -= b.grad*0.0001    # 回归 b
    - V7 U: R) ]. O+ [  w.grad.zero_()  1 j2 v, ~4 {* A( W
      b.grad.zero_()) k3 h  c* C9 r/ ]7 G  a1 q+ M
      |, t6 F/ p7 S0 L- }/ i$ V! A5 P
    print(w.item(),b.item()) #结果
    - A8 x7 B. q' }
    . b3 E1 q' i- @% qOutput: 27.26387596130371  0.4974517822265625
    + ?( q) F2 W3 M! o----------------------------------------------
      z) K  J, t4 W4 N7 O  p1 K最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ! t& t( Z7 H) D$ D! D$ l1 G高手们帮看看是神马原因?
    ) a# z  J2 V7 ]0 P  o' ?

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    4 ]- }& Z6 C$ Z. B1 c/ H
    9 h+ O- O9 O' u# Q, b  j3 F没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    / H) S1 g0 b4 I-------
    : X* g( l6 m4 m  y7 K, C. k7 W不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。) H! k1 G1 v) G5 z) a7 ~4 q& f& N
    -------
    3 O9 X% s! `3 ~( u算法诊断部分,建议把循环次数改为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, a3 q2 X  q5 x) O
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?* P5 v" ?0 w" E; E+ o3 B4 W/ Q
    -------- m3 A% K! p3 v  K! P; Q* N- q
    不好意思, ...

    ) p& s6 L7 G4 S* a, h谢谢,算法应该没问题,就是最简单的线性回归。) j! I8 |4 d5 L1 X  @; d
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 ; r) H; v: v, Y1 D2 s
    雷达 发表于 2023-2-14 21:52* u: S, p; E. j( N
    谢谢,算法应该没问题,就是最简单的线性回归。
    7 t0 u+ C$ ]- c1 n1 Z) z2 V5 Q我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    4 `2 B) H* r7 e" o, p' B% {
    , V$ g' u0 Y1 Q( ]* w+ M0 r! u
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    2 k4 d6 I1 x+ K$ v% y% o% Y% k# {3 F5 e  I- u
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    : X1 @# L4 L  K1 V
    老福 发表于 2023-2-14 22:00
    ( N& y# h* i8 |6 Z刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。- ~6 \. m$ b2 M/ \: T$ q: g5 X
    * ]( j. Z& p2 V
    或者把b但的起点改为1试试。 ...

    3 F3 P6 {& ~) K+ _; Q4 V! L+ @7 ^7 T/ n! u4 h1 u2 T: s% G
    你是对的。
    5 G/ V6 `& V0 O去掉了随机部分# h6 i  N7 p, j7 M. ^
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    . ]7 \  h  ^# d5 F1 Gy = (x*27+15).reshape(-1)
    5 t" k+ w' }/ [: k( {" A6 B6 S9 N
    ) w5 r! e$ g# n! _% v' }循环次数加成10倍,就看到 b 收敛了
    3 z0 v9 c9 C0 D& N, nw , b
    : t1 x4 Y8 t+ W27.002620697021484 14.826167106628418
    + R! s/ A0 B, D; p7 H
    $ \4 |/ }5 P9 g" [+ u和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-15 15:56 , Processed in 0.082048 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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