设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    : P( j! k5 V$ O6 i& ^" ^
    # s7 ], ~  q9 j: u为预防老年痴呆,时不时学点新东东玩一玩。  s/ b3 t. ~* Y9 |$ K
    Pytorch 下面的代码做最简单的一元线性回归:
    ! ~* f7 F5 c9 x$ ?7 |2 t! B. ~----------------------------------------------
    7 b# l7 r: f" aimport torch8 d8 \) p! w- X& ?' n
    import numpy as np; `9 g; P, ]0 U6 t2 ]& x
    import matplotlib.pyplot as plt
    3 \& x, d1 E- e% S- Wimport random2 C$ N8 g- z4 b3 c. i. D: M
    3 B. W+ \- t3 b/ n9 C3 u5 d
    x = torch.tensor(np.arange(1,100,1))) R/ T1 O5 O1 |
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    6 Q$ [. k# }) P. S$ _& g9 J" N7 Y9 A7 i, F# W5 w( n
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b+ b/ }2 j, C, z9 k0 n+ q
    b = torch.tensor(0.,requires_grad=True)
    " v4 a# _( |2 K: T
    & @2 d& p' y" {5 oepochs = 100
      A- U$ v6 C' x. F* D2 E; I' l( U0 V8 {
    losses = []# j! w$ Y8 c' Z) z- U. x
    for i in range(epochs):/ |# S) B" Y" W3 c1 ?# L( L
      y_pred = (x*w+b)    # 预测
    7 u2 _% r/ y$ [  y_pred.reshape(-1)( h. a8 d7 ^8 v" |

    & [! F+ g% C9 i0 i8 ^8 J' z5 t  loss = torch.square(y_pred - y).mean()   #计算 loss6 Q, V! F' j+ H+ y- o
      losses.append(loss)+ F5 M6 D* X+ B: |& J! S
      9 V7 F9 @% a. o( q5 g! y
      loss.backward() # autograd3 g- S" P5 t$ |- A3 G! o
      with torch.no_grad():
    * k1 G( I9 c) [8 y: x' _2 ~    w  -= w.grad*0.0001   # 回归 w
    . W) Z, u+ W5 k0 d  F: \5 B    b  -= b.grad*0.0001    # 回归 b % Q1 H, v. D5 d& l2 M* U/ v; W
      w.grad.zero_()  
    - k5 n2 ]- Q5 H3 V  D( D: W/ M, T  b.grad.zero_()! A: D" A: _5 d9 a- u

    ; P" n5 d/ S9 `( _7 l/ Gprint(w.item(),b.item()) #结果* b, S* S* ]4 W& z9 |2 F. ]& |

    , ?% i% ^* t; s9 D0 |Output: 27.26387596130371  0.4974517822265625# l, b: N# B: p4 L, p
    ----------------------------------------------& X7 n$ `9 E8 |& w( A% F) Q
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。7 Z( a7 K3 R0 w+ B/ G/ b
    高手们帮看看是神马原因?
    0 [" g& a# c/ S1 ]

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 4 _8 D1 z  w5 x1 p

    . F' j! T5 ~7 |4 {没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?% B, H, P4 L$ F% M
    -------
    1 I' K" n  U( r3 }& c' b) B不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。$ U1 m6 H: L2 m( z- v
    -------& S* ^- O! w8 _3 c& v4 D& P0 H
    算法诊断部分,建议把循环次数改为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/ ]9 B: F- Y: R( r& Z- d! ^! L
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?8 Y; f. \' ^$ p# m/ [" x$ E
    -------2 X3 O! n5 }; [4 w8 u3 s
    不好意思, ...

    " x* ?; M8 E4 P9 V" k0 z- l% `3 I  s谢谢,算法应该没问题,就是最简单的线性回归。
    ) |$ y0 j3 T! j4 T" r' Y我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ( Y) ]) s- d. g6 o4 U
    雷达 发表于 2023-2-14 21:52( C3 T' H+ c( w! Y" k/ A4 K# N
    谢谢,算法应该没问题,就是最简单的线性回归。
    1 K; T4 @" r' m4 ]我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    : E% |: S1 ]3 L8 C8 L/ M
    7 P* }8 i4 ?0 Z0 \5 R! u, N1 Y$ @/ R
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! I3 y- }6 f1 f- X" m

    " B8 M3 ^1 v) h或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ( `* W1 |1 J% ], _# k
    老福 发表于 2023-2-14 22:00
    ! a8 U+ k. P  a$ m% ^刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。$ z& ^! L+ M: Z$ H+ k

    6 Z& j4 v# ^4 o2 X或者把b但的起点改为1试试。 ...
    : D% [) A9 _9 R& A/ i0 Y) n& q

    ; x4 s- q% p/ J# S你是对的。4 ?) |, A/ g0 _
    去掉了随机部分) d, }6 ~1 z- B( ~# L  G& K
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)% A! o9 ?" Y& N7 l
    y = (x*27+15).reshape(-1)/ z9 q2 l" x0 O; {

    # W5 @* i& ~' U0 _" C0 M# O循环次数加成10倍,就看到 b 收敛了4 H7 f- W& M$ j) u' d0 g
    w , b
    ( o1 E: e% x. U. }# L27.002620697021484 14.826167106628418& t' t  r3 e$ d1 F
    8 H6 u. ~- J$ b: W# ?  u
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-15 17:13 , Processed in 0.057882 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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