设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    ; @. T, W4 G/ J0 B- j8 U5 L3 x% G; ^2 G+ X
    为预防老年痴呆,时不时学点新东东玩一玩。! v' m" R; p, @0 V3 Z, j
    Pytorch 下面的代码做最简单的一元线性回归:
    8 |% ^* }' X: S6 j# K----------------------------------------------
    , o7 f/ f- {2 Pimport torch
    + ^/ }) i- b: M; c3 eimport numpy as np
    " a/ X, ^' S+ @$ _import matplotlib.pyplot as plt
    & {- v2 A1 T4 O$ `* j* W' w0 himport random5 T1 @5 w$ s# u: w- D/ T
    - A+ ~3 y- F2 g: [% J
    x = torch.tensor(np.arange(1,100,1))* J+ D- y9 z5 h9 Q2 N1 v3 w: t
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    $ X9 c5 m' r+ O/ R& n. Q- g  Q9 ~$ X  |9 A
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    " s: j; z2 E1 ?- r! p0 gb = torch.tensor(0.,requires_grad=True)
    ) c. `& z8 v- G* T- S& L5 i. I' }. b& @9 r
    epochs = 100% W3 d: X$ a/ |& l( v0 b, i

    3 W- S4 d$ Y7 Glosses = []
    4 }- R3 I7 j7 K; F, Lfor i in range(epochs):
    $ x# F9 j4 S( g& v) M9 Y$ r  y_pred = (x*w+b)    # 预测3 |& D$ [# }+ Z# p# X, H% n3 {7 C% g
      y_pred.reshape(-1)- K, j6 D3 f# M9 M

    2 T0 _1 K4 o% Y- |  [  loss = torch.square(y_pred - y).mean()   #计算 loss, v( c8 p3 M9 O
      losses.append(loss)
    ; a! B: |7 `1 ~* _! Q3 Y  
    . L% A; ^/ x2 [0 b  loss.backward() # autograd( q$ n, W/ M/ c0 D( d6 d: K
      with torch.no_grad():
    , R5 k0 M/ \! i* a1 A    w  -= w.grad*0.0001   # 回归 w
    " R8 n' l0 h7 }9 {4 r    b  -= b.grad*0.0001    # 回归 b 4 e+ f& r8 C9 N* X9 ?- A4 T
      w.grad.zero_()  * v2 @4 s& b' i& X
      b.grad.zero_()6 j( y$ X) l" @0 W) V$ ?
    ( i! v9 d6 C. B& t* h. U& y% |' n
    print(w.item(),b.item()) #结果0 E" P7 \/ a1 b0 Z
    + B1 ^! k; b1 v
    Output: 27.26387596130371  0.4974517822265625. g% O5 n+ \) T2 L0 E  }
    ----------------------------------------------; h1 T4 M. Y" N, c. @& ]) i
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。/ W' F' O' ^$ s" g3 N
    高手们帮看看是神马原因?" d6 t& f! e9 F% W# H" P% H

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    4 g7 S+ e6 p' P" G+ R7 O/ A: X6 L! p6 C
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    7 H$ ~, O5 r2 y, s-------
    2 T0 W% ]% h: ]3 e; c不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。9 T% t3 r' u, V1 ^" P
    -------' @5 T5 @) M) N- B8 F; l6 c: N
    算法诊断部分,建议把循环次数改为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, Q4 r8 E' k  B, u3 D1 r2 k
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?4 [0 k6 M( D# `- Q5 g4 F$ z  {
    -------
    ' B- _+ z4 U" J0 ]不好意思, ...
    2 @2 K: T% U% q5 _+ h  y% i/ A2 P
    谢谢,算法应该没问题,就是最简单的线性回归。" t& [" i  \8 F0 Y; B
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    / B5 p4 f$ M, `1 k( l/ y: y
    雷达 发表于 2023-2-14 21:52+ @7 P# P( d, r. k0 c
    谢谢,算法应该没问题,就是最简单的线性回归。( w4 H' @' Z/ d) y
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    6 z, @' X2 |4 T! R: l
    ( b# T8 a7 ~4 E, [, `" i- b
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    " {/ H* }2 T- O7 C* ^: \" J" u1 v" C* A& l7 b
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 : [( y( F- @1 y6 b& {% I
    老福 发表于 2023-2-14 22:00
    7 a) P5 v5 q4 K' j8 _( k3 u刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    7 s0 |( e2 Q: q: D# _/ j* k/ I& r
    $ o( W. p8 O; x8 n或者把b但的起点改为1试试。 ...
    / q  |8 q/ r. m7 v1 z) d& H4 r
    2 z+ Q2 ]: s4 M0 A' g* ^- @3 T: N
    你是对的。
    ! U8 z( g, Z7 s! W# }7 s: L% ~去掉了随机部分$ e3 c( V( o% n7 Y# `3 w' n
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    6 H: Q8 r& ^) Y. M0 x2 u; V- fy = (x*27+15).reshape(-1)6 }9 f) b( Q& i( s

    : b! E2 V+ E% P6 q循环次数加成10倍,就看到 b 收敛了# p% Z; }" X- E+ U$ \5 l
    w , b" W% J" n7 e; _( s
    27.002620697021484 14.8261671066284184 w$ _! i" G9 u7 F, x

    2 r9 `! w; M; N! i. Q- o" f" y和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-9 23:21 , Processed in 0.055749 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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