设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ( u9 I& {6 L$ o) t/ s1 M  \2 Q
    . Y) T, p: ?: L' a) h
    为预防老年痴呆,时不时学点新东东玩一玩。
    ' e5 E8 B/ m. E" t- v- A1 K) uPytorch 下面的代码做最简单的一元线性回归:
    ' P* b4 z# c6 @1 d# T----------------------------------------------
    % ?- i$ b' G: u- }3 j2 Uimport torch# \3 A6 X4 y# ?  B( `  @0 l2 K: k
    import numpy as np
    ; V( O; V2 E* ]/ q& K: T* Bimport matplotlib.pyplot as plt  l0 C& s4 S9 j$ b9 L& X* V- \
    import random" B: V3 q: R* f& Q7 _
    # i3 I+ x' K; E+ C( j% p2 g: a
    x = torch.tensor(np.arange(1,100,1))2 |3 K0 B( E5 m+ }7 Q
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    & W; v0 A, o& |/ o% z
    & G# j5 |5 X7 p0 \( H0 [w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b! C6 c& m" E2 M* m$ ]
    b = torch.tensor(0.,requires_grad=True)/ U, d4 ~+ x) Z2 I, K* n
    , F$ X* T  Y3 v' l  e
    epochs = 100
    * ~6 g1 B( E. j/ C! ?5 a! Q# O# \( ~" r& M2 L' A7 S
    losses = []
    8 H5 Y9 v7 D5 g  Zfor i in range(epochs):# a# T  [8 `) R+ h* W& I
      y_pred = (x*w+b)    # 预测& `9 \) T' M( I* H+ w) v+ u
      y_pred.reshape(-1)
    ' w9 S) z* a3 r1 j 1 c- w# S& X# P7 U& }
      loss = torch.square(y_pred - y).mean()   #计算 loss
    . B- R) E2 T8 {% `4 @4 k, X( }  losses.append(loss)$ y$ ~* I. B# ]+ X5 m$ ?$ v
      
    5 ^" _8 A2 ^% w! r; l- ^7 h; A* b  loss.backward() # autograd9 t5 K+ k+ m( J* a
      with torch.no_grad():7 x7 r5 B; F, J. j
        w  -= w.grad*0.0001   # 回归 w& ]" n6 R3 e4 S. P" E1 o6 E
        b  -= b.grad*0.0001    # 回归 b 3 @; x) D+ U) ]( M- c
      w.grad.zero_()  1 T8 e0 A& V, Z/ y! l. g
      b.grad.zero_()
    3 q( @3 Y5 X  F) L9 _% \5 u
    / L+ g; Z3 D8 ^/ P# Z6 _print(w.item(),b.item()) #结果; B  y2 X( s5 ?
    # N+ ^2 M3 x8 C/ n% l
    Output: 27.26387596130371  0.49745178222656250 Q% r7 C4 `/ }7 q9 V% r
    ----------------------------------------------
    6 p7 L7 q0 Z2 v: F3 F/ N7 u8 ?8 D最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。5 n0 o3 i" H# V0 j( g) a! _* x5 }
    高手们帮看看是神马原因?
    ! S7 f8 o! |/ r0 M: @; |

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 . J# Z5 w1 T7 h: T5 V; o- m  [
    - F# ^( g, a' W) [
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ( X( V0 I3 c2 d. ]( O7 w-------
    4 m$ {5 p; d5 ^2 s) B+ p# ]7 U不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。$ p# t2 ]; M" ~9 _6 B2 C9 a
    -------7 u6 [6 }7 x) Q& ?! u: L6 R/ u7 w
    算法诊断部分,建议把循环次数改为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% O9 L$ C4 x1 A0 |
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?$ Y, k" u% i6 _9 q, g% Y
    -------
    4 {& B) R" g9 v# o不好意思, ...
    . `) R' g4 ^8 g/ J% Z: H! O
    谢谢,算法应该没问题,就是最简单的线性回归。
    # O% P& c1 o7 N我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 5 c; }5 }% F9 h  A1 O, J% g
    雷达 发表于 2023-2-14 21:52. B# r+ Y% d2 y! }1 X
    谢谢,算法应该没问题,就是最简单的线性回归。
    6 O4 A, R1 T  M我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    ) O: B4 V  `5 W
    1 K1 T$ d% A: V: A  r# b( \
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。& Z+ p* X$ R8 |* j( S, D* G

    " m$ D* [; k5 m或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 9 e8 q; u/ L/ C" B  Y
    老福 发表于 2023-2-14 22:00" E0 \/ @, O3 e( `
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ; b9 J8 j$ |. f' O0 Y+ B
    ) o9 J3 B5 h) B1 ^, j1 o& J或者把b但的起点改为1试试。 ...

    $ Q+ Q- b7 q+ F$ z1 N- {" c3 K
    " C0 Q& O/ ]9 T你是对的。
    7 p- d7 Z9 |* d+ u5 {& s) q; t去掉了随机部分
    * l( U) P" n! {- v# h$ A#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    $ d9 d0 V. F. _0 V4 [* L4 vy = (x*27+15).reshape(-1)
    / V6 b: U2 ^; x8 Q2 H% L2 x
    ( q" J1 s; @4 S% L  F, `循环次数加成10倍,就看到 b 收敛了! ^# o& }0 A7 D
    w , b) O' t4 Q" y: F
    27.002620697021484 14.826167106628418
    4 W- `/ j# M7 Y/ h- \4 Q! h2 ]% x$ j( e* ^& i4 ~
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-3 00:51 , Processed in 0.055616 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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