设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ( p$ W- r- C" ]6 I) a  {

    2 b; d+ N3 T% L为预防老年痴呆,时不时学点新东东玩一玩。4 F5 i1 E) w% f" g% L
    Pytorch 下面的代码做最简单的一元线性回归:
    ; ]% W4 \% I7 N2 T* U0 Y: A: r----------------------------------------------; k7 V# p# d" E6 \9 o0 {
    import torch
    $ Y  O) c& _- t5 O7 j2 O0 Eimport numpy as np
    2 r4 j8 a' }) j' N# uimport matplotlib.pyplot as plt1 I( t: A2 d- H! p; a  d/ C
    import random/ |! S  u" }+ E; [% e! B

    ; I/ m! H: F* I* E7 u/ f* Cx = torch.tensor(np.arange(1,100,1))
    9 y% Q5 O( d5 l7 Y9 O. O( Hy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    : Y: e" `# [8 n' c  E( }5 ~( H/ c2 s# H+ f: c
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    0 a3 s( @2 U! `# V# x3 b$ n- F+ b2 v: Pb = torch.tensor(0.,requires_grad=True)
    + r0 Y2 i- L0 @. \/ C3 c. Z3 t8 D& `$ V9 Z; r
    epochs = 100
    1 y( i+ T1 ~& ^/ ]4 t4 o7 F& m+ x8 d1 Y1 }
    losses = []
    % ]# J) k4 h- f) ?( T+ ifor i in range(epochs):
    . i( R8 o/ F: |  y_pred = (x*w+b)    # 预测
    5 c% R9 b" |/ }  @* }5 r0 Y) v  y_pred.reshape(-1)0 Q, \7 e- ?1 }
    7 ~: e4 S9 ^, w+ P5 ^! }
      loss = torch.square(y_pred - y).mean()   #计算 loss3 Z5 B8 T9 n5 E/ `
      losses.append(loss)
    . _# y5 |% j% a. b  1 H1 c2 @" U+ b2 X* f! b+ p* o
      loss.backward() # autograd' N- w, `5 J/ o9 W' i3 V
      with torch.no_grad():
    - w) k* Y# M" M6 q# a! ]    w  -= w.grad*0.0001   # 回归 w
    * E% d6 H* Q( A    b  -= b.grad*0.0001    # 回归 b
    ( S, E9 N7 B. D( R, Z  w.grad.zero_()  
    3 g6 Y* O. f- y5 `; |  b.grad.zero_()
      _/ M1 W; G8 p4 X  `  f- x( [- G4 X8 X( ?' U$ h- @2 r
    print(w.item(),b.item()) #结果  J& p- p1 b7 j3 g/ X3 `6 O

    & i3 P2 n0 F0 b7 @6 ?Output: 27.26387596130371  0.4974517822265625" f/ v# b5 U+ w& N6 f
    ----------------------------------------------. {& B0 j' e. u
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ' _7 k* ?. b7 F; ~: j6 b5 T$ G* A  H; \( [高手们帮看看是神马原因?* B' [6 z( O  \7 n

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ; c' v1 S" X, F/ m" W" f! G

    0 r4 j9 L. W9 k0 E' g. X没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?; D, S/ s$ L" }; H$ d) o$ k9 h! z
    -------
    5 E2 l" J+ ]  I& ~. W4 W不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。: f- T* G, y+ ~8 @
    -------/ O  g/ c9 }4 M; s9 M. [1 m3 P) C
    算法诊断部分,建议把循环次数改为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
    2 m- K% O$ ?) L6 u3 {4 x没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    * w- \. q& W' D1 r% Z-------
    9 P- s# Q! A2 t) n, J* P不好意思, ...
    4 l2 O& ?. O' B. a8 r9 h/ R
    谢谢,算法应该没问题,就是最简单的线性回归。
    $ u+ Z, A2 z/ ]4 D" Q- h9 O# O6 g我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 4 \: F/ L+ A% j+ b* S
    雷达 发表于 2023-2-14 21:52
    3 a; f/ H/ @8 a" e谢谢,算法应该没问题,就是最简单的线性回归。
    . k+ H; H, H& s. g- _我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    . o  `6 ^! n+ z8 U/ t
    ; [# X' W7 F8 j4 S* O. j. J
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。4 @0 H+ j9 B( H2 ~' k9 D/ R
    : u& D% _4 q" |( V
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 , O4 R/ o$ X: m$ ~. u" `
    老福 发表于 2023-2-14 22:00
    * u. K( G1 ?' r6 D- f刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    3 v% l0 q, V* t  c. s  x- @- c$ E. Q8 _( a7 H& g. M
    或者把b但的起点改为1试试。 ...

    % @* w$ K$ j, y8 B3 M; f, z7 D: N' g' ?5 z' ]9 C+ @  M6 Y2 f
    你是对的。
    5 {& u+ `/ Q' W  a  I$ W" F6 a去掉了随机部分
    & b# U* E. l; J) \: ?#y = (x*27+15+random.randint(-2,3)).reshape(-1)
      G- D6 n! o6 R* I0 k# H) q! B, ty = (x*27+15).reshape(-1)' c& j% {0 Y9 D! a; z

    0 J2 z2 j# U- {: D4 U3 |$ U循环次数加成10倍,就看到 b 收敛了
    " H4 i& D  U: a1 j7 Q& Gw , b
    5 G$ T) l/ ?* j9 b# I4 c( J6 ^+ `8 f' S27.002620697021484 14.826167106628418
    3 C$ \! d# l9 |9 z4 Z9 ^* g
    9 n2 D3 Y8 M8 J& j9 U和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-10 15:12 , Processed in 0.068515 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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