设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ! p9 |( [; B1 e! l3 |% f7 x4 J

    : }4 L" x7 Q. b) ~9 [为预防老年痴呆,时不时学点新东东玩一玩。5 s+ m" B8 u$ b+ M( t; u
    Pytorch 下面的代码做最简单的一元线性回归:5 o+ }: F1 O0 F1 d7 m" u- L
    ----------------------------------------------3 j( B) A) D9 u
    import torch
    ( x, }2 o8 R5 w& }4 p/ jimport numpy as np" x4 Y, }8 c' Z. }% f5 Y6 W
    import matplotlib.pyplot as plt9 f5 Z9 ^! F8 n7 b4 D4 ~% t
    import random4 c5 Q6 D- @' K) |
    . ]% j$ v, `5 A3 x" R
    x = torch.tensor(np.arange(1,100,1))# |5 w# _$ l1 X& i6 y% O3 l
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    & g1 p9 }8 Q* I+ ?) i$ x0 H, [: a3 A6 y6 a8 E; Z
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    5 t, L/ B/ I9 m7 mb = torch.tensor(0.,requires_grad=True)
    ! s  o2 r% ]5 }& |  _/ V; J; C7 P+ j4 c9 L
    epochs = 100
    ) O& R) d1 a/ c7 Z! o) c& D6 v* b3 @+ h5 P: d
    losses = []  ~3 N! K8 V+ ]" ^: L2 `
    for i in range(epochs):
    1 J% g( N8 X: I) q  y_pred = (x*w+b)    # 预测
    - B7 s0 I$ q, h1 ?. o0 A5 _  y_pred.reshape(-1)$ Z" o8 M2 D& |0 P/ C/ Z& ^

    & y1 I( E$ f. P  ~+ _  loss = torch.square(y_pred - y).mean()   #计算 loss2 I% `7 Q- a/ c9 i
      losses.append(loss)4 P- G, _6 b- y( Z
      6 b6 s( s% U" s2 h9 }# W, K2 ]; o/ L
      loss.backward() # autograd
    / R, H1 u' a( J; M  with torch.no_grad():6 x0 ^/ T' F: x8 U9 t6 A' ~
        w  -= w.grad*0.0001   # 回归 w& q: d# k% y5 @& T
        b  -= b.grad*0.0001    # 回归 b ( T6 Q' Q- a7 P" p
      w.grad.zero_()  
    % ]3 @9 Z" C4 v- O" ^' ]' |% A* C  b.grad.zero_()$ x  b; B' j% a! e$ Z7 L6 i

    $ y5 n7 K0 F$ z: L% vprint(w.item(),b.item()) #结果
    9 T- t* l4 t& J( P, {) {* f9 \+ l$ c5 `5 W$ m: l
    Output: 27.26387596130371  0.4974517822265625
      {/ m+ S% ~# M3 s9 p  U2 m----------------------------------------------
    8 B" K! m2 G+ Y# R最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。; f. Y: b' l* z) ?5 w; b1 F
    高手们帮看看是神马原因?
    % [9 g2 z+ i$ B) X6 C

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    & U' j$ b2 I0 Q* `/ l. v- p& O( u: v6 X% B- a' S, t2 W* B
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?" {* a6 I- S0 j0 U- ^. ^
    -------
    1 ~* _: `: T( \) y0 `* @/ L不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。4 d9 _$ n! c( r  L) P8 z; e0 x
    -------
    ' L% r$ ^' g/ v: ^6 H2 j- Q& V- A算法诊断部分,建议把循环次数改为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
    ; P- m. Y1 X6 |1 C没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?+ W3 j+ |1 A& ~  R+ C! e3 c
    -------
    - O7 j! A/ B6 Y1 A8 H& e不好意思, ...
    2 W( w. k) y3 C3 `
    谢谢,算法应该没问题,就是最简单的线性回归。: B- E; ^, }. f% V: W+ ^
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    4 H% e9 W. B. z2 m5 G4 N9 c% n/ w  E) `
    雷达 发表于 2023-2-14 21:522 f$ O6 T6 c- K2 j; e2 N: k
    谢谢,算法应该没问题,就是最简单的线性回归。
    1 V0 b$ v1 L- C* j' D& u- b. x我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    + J) t! c. I' o# G/ Q6 r- n
    - k0 H' {$ @6 T# t刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ) W; q- c# _# ]. ]
      ?' T# Y" N6 u+ n. j或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    $ D2 _  V4 T1 F: |% D* f
    老福 发表于 2023-2-14 22:008 r8 U7 Y+ v+ @. I8 x% v
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ( m8 }: r" ]% b" d, ~, I& G2 N% T* N
    或者把b但的起点改为1试试。 ...
    1 s% L4 R. l1 k

    ; U) j1 B. t$ h; Y# |# A# u# ~你是对的。: I% g! \: S0 l3 k! F5 U; s  o
    去掉了随机部分0 @( }5 T7 J9 T9 ?% T; f- }& X7 Z
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)0 g7 l, A) a" {: d) e" M- d
    y = (x*27+15).reshape(-1)
    - U- f' Z; j2 K) }# F8 J" ^6 n( c, K. M5 Y+ K
    循环次数加成10倍,就看到 b 收敛了
    4 ]: y% u8 j5 z) f: \$ }w , b! T) u: e6 O4 H. E
    27.002620697021484 14.826167106628418$ {/ Y3 a% f$ P3 s  p' e0 R; l2 s

    , l! L1 h; \. u* X, Z' g4 G和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-27 02:26 , Processed in 0.064418 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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