设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    5 h0 Y* G! S* C7 b$ t, p
    & k/ F( @: }9 A* W) o% |为预防老年痴呆,时不时学点新东东玩一玩。, N3 n2 }5 v: l" R/ n" F
    Pytorch 下面的代码做最简单的一元线性回归:0 I; L" t( |4 W& T0 W
    ----------------------------------------------
      U( i: H. x7 _import torch" F  R, q- ^. ^
    import numpy as np
    8 q9 K5 V) I9 W# R% kimport matplotlib.pyplot as plt4 q+ i6 g4 D  [5 y. V
    import random) h! d' n- ~9 h9 J

    , \! Q( l' T  x" nx = torch.tensor(np.arange(1,100,1))4 o% s1 l8 t; [
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15' Y8 P9 R. w" g$ A; [- G

    # n  u  c- X9 `; W& x, W* q- N4 Cw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    4 L0 W1 s8 V; i+ J  t& Rb = torch.tensor(0.,requires_grad=True); L- p0 l: ~4 S- w# o
    * x, S% a0 W) X" v' o  T. i8 L" P! v, j
    epochs = 100# s) d+ |0 l1 T' P
    6 H1 H3 @& E- b! h; M3 f. u
    losses = []
    , i! r; d( t5 t& Y5 K1 U4 W, Ofor i in range(epochs):
    ! T9 \& `8 z( J  y_pred = (x*w+b)    # 预测1 |! u; {- N' P6 X3 o) D* U0 w
      y_pred.reshape(-1)
    0 A# Y1 \1 ?' F# F # \& V3 w0 `4 C) M# _3 p; o( S1 `$ ~
      loss = torch.square(y_pred - y).mean()   #计算 loss
    " \4 G: [, p, e; Z% H! j  losses.append(loss)
    0 P& f/ N8 z* j# @4 H' `2 [4 E- K5 @  
      f6 A! Z! D# x( x) C5 k  loss.backward() # autograd
    , A* m1 R) w2 f( e, _- y  with torch.no_grad():
    ! @6 O$ R3 i3 [- E4 H    w  -= w.grad*0.0001   # 回归 w9 S, V" H" W( q, u
        b  -= b.grad*0.0001    # 回归 b 4 Y" N- C8 S) t& o! v7 i
      w.grad.zero_()  8 H$ l4 K7 A" V2 @" X# C
      b.grad.zero_()
    # S# p9 @1 u) }) s3 _* B% W
    8 \( O. f5 e. ~4 x. G! L1 p5 t, wprint(w.item(),b.item()) #结果% p& p$ Y( u4 P6 m7 W$ z- [
    2 z7 M! N0 |+ s, J5 k5 S  @
    Output: 27.26387596130371  0.4974517822265625; I% {7 V0 x3 {8 T$ w. }! u
    ----------------------------------------------
    % N# r5 C5 K2 _2 z5 H1 t- L, l2 h最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。8 }, S7 l& j' c
    高手们帮看看是神马原因?* `* O' O3 Y( @6 r6 |

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    # q9 v; C( Y' {0 O# [& e1 g. g5 Q# ^8 |2 O" Z
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  [: p7 R+ k: ~
    -------. O: v& s% I/ j# Z4 c1 g
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    - [& V) L6 x8 `  }6 u$ _' C# v- b-------
    8 Z) Q6 `% Q! z3 F/ U; b% q1 Z算法诊断部分,建议把循环次数改为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  u# j( [# e4 L' x5 P
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?/ J  [. u- Z7 o; r
    -------( m  p5 ?( K- o& z: D! E: _
    不好意思, ...

    7 r: W6 H, s4 A0 S- u5 ^' ^谢谢,算法应该没问题,就是最简单的线性回归。
      v. ?$ L/ E& s  z( o" V我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ! e2 X8 V: {6 @5 |
    雷达 发表于 2023-2-14 21:52
      x% C6 R/ D! p1 T谢谢,算法应该没问题,就是最简单的线性回归。
    8 p! }1 s# ]8 K# k7 h3 [我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    & _, ^* v8 f7 @7 T9 w, u: Z3 Q
    # x; \/ U* W9 Q* b
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! |+ h6 V% _6 I% \  t; W& R) c9 Q. g
    3 f) G& N2 E& d$ Y; f
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 ! y5 C( ^/ ]5 R' m- z3 L2 c7 `
    老福 发表于 2023-2-14 22:00+ z3 J: p3 l9 ~! t$ j2 l3 _
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. S  T7 S; z# Z; s0 W

    0 P9 |5 B" F* ~  q  M2 k' {或者把b但的起点改为1试试。 ...

    ! U1 `: [; I+ @; z$ Y8 Z' E% _
    8 o: [  Y* C' I' _你是对的。
    / B5 @5 ~6 J0 h: r% t去掉了随机部分
    9 M" \' S; i" A3 Q& H0 D# f4 v8 C#y = (x*27+15+random.randint(-2,3)).reshape(-1)3 U* z9 K) P* o$ J' J. j) S1 h
    y = (x*27+15).reshape(-1)8 h: H+ {' e2 z8 {; i0 q

    7 T3 G/ y* w# S7 g循环次数加成10倍,就看到 b 收敛了9 \. V% H6 K3 \3 {" {0 V1 p% g
    w , b  l# W" u8 X! {. B' J" L
    27.002620697021484 14.826167106628418- g3 [$ l+ {! Z( y8 N
    0 ~6 v% X" P$ I3 o1 \4 Y
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-16 10:38 , Processed in 0.058593 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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