设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    . \0 E, ]9 b6 p; e/ G4 G' u* |6 s5 |
    为预防老年痴呆,时不时学点新东东玩一玩。
      z  I: k; }7 [; t. Z( U; ZPytorch 下面的代码做最简单的一元线性回归:8 ], K* j" R' H. ^
    ----------------------------------------------
    % L  X8 D; {* }# dimport torch
    " d  o  m+ [# _& v& @! U3 i/ r( U( himport numpy as np& r7 {6 s9 d3 U; b; X( h: g
    import matplotlib.pyplot as plt
    0 ^1 ?( G" Q4 L: Oimport random! b$ W, ]! e2 Q1 z8 o- u. }

    7 @  A* ~- `) F3 X" k! M! Mx = torch.tensor(np.arange(1,100,1))5 I, @  }4 m. J. u1 H! g- v
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    8 }9 `% I, {! T" s& A; g6 g6 Z- T7 B6 K2 d5 R3 r
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    % F- S: H- N. U8 j+ bb = torch.tensor(0.,requires_grad=True)4 Z3 ^5 G$ a0 Y

    ! v# u* J( k8 eepochs = 100- H1 l2 b* G0 `3 }
    * g0 N: C  P  C( o% ^+ g
    losses = []
    + Z2 G9 E1 E1 }for i in range(epochs):& }% f* T% A8 }$ M+ f' n$ ^; ]
      y_pred = (x*w+b)    # 预测" C& y! P& v! A
      y_pred.reshape(-1)
    # q0 [5 Z1 |! A4 [9 M . ]" G: }% j$ G7 t. r! C; {
      loss = torch.square(y_pred - y).mean()   #计算 loss
    : O# J  @7 c; L0 R5 P  losses.append(loss)
    / T, Q# ~7 P* R$ s/ b2 C  . ?. O( r$ l1 I( X. ^1 G0 M+ N
      loss.backward() # autograd( J3 F8 n3 L* ^* _
      with torch.no_grad():
    9 [2 z1 P2 j9 p( [7 C    w  -= w.grad*0.0001   # 回归 w3 R5 d$ G* r! w# f
        b  -= b.grad*0.0001    # 回归 b 5 H5 h% k. A" U& E! {  O0 {
      w.grad.zero_()  
    ) E. l8 K6 H' v, y  b.grad.zero_()# Q. h, U1 J" R- ]; G7 t$ G: @
    . Z) [# a; f7 s! E& ~6 a
    print(w.item(),b.item()) #结果
    - J- L  G  ~" _/ M- n# U
    9 r" b9 c" n1 N* U3 j, D+ VOutput: 27.26387596130371  0.4974517822265625( a& Q) [  K; D, B
    ----------------------------------------------* e3 E; N* L# M
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    4 j& v8 M- C8 ~! F$ W7 S高手们帮看看是神马原因?6 y8 D$ }$ u9 ^2 [. W$ X

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    & f: s( ]; {* _  d. S3 [1 G* ~& e9 o  `0 q# I$ q7 ^' s: g
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?& ?0 m, \. G0 C; ^) }2 o& R
    -------
    & h5 J  X! K( L; D不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。$ J- [5 R6 t, M0 B# T( w
    -------
    8 h. }& l) P% `# J) m算法诊断部分,建议把循环次数改为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. J% d8 P  A- X- a$ F
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  _( V. c/ m5 B8 b- B' j( `- e
    -------! G# n5 }6 p: y* M# d% M( W
    不好意思, ...

    , ?6 I7 e' L2 D3 p# Q( R# A9 g) H谢谢,算法应该没问题,就是最简单的线性回归。. J: M9 ?7 `/ D; M. ]
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 # k  ~, n9 J- K
    雷达 发表于 2023-2-14 21:52
    7 |- H3 K) B# ]  D, e! M5 j1 x. f" Z谢谢,算法应该没问题,就是最简单的线性回归。0 \! \, M9 E' }3 |1 T$ H( U9 |5 I
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    ! M  C6 I( w4 U
    ; s# v5 Z, H% P0 S
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。# t; Y) V: P- G: _5 n1 B6 K2 B

    ) J3 {) c: p' I7 c或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 % S. Q! m" j/ P3 ]& o; u( g
    老福 发表于 2023-2-14 22:00
    % ^5 l2 t5 a7 ~" }, H4 ?+ j刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。* I" S  R. O4 s& C  ?, f

    2 k; z/ a" Y& @+ @或者把b但的起点改为1试试。 ...

    - P" _  v' c3 b
    ( ?3 g, p+ n, M4 M你是对的。5 b# ^5 i3 E4 M4 G9 L- A
    去掉了随机部分8 |9 `8 @& t) m% H/ Z% B) C
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    ; X- M5 @8 ?* z4 B; s* @y = (x*27+15).reshape(-1)
    + X7 g& n' [1 y  n3 h: |+ L; F8 S- N+ L2 v3 N4 Q
    循环次数加成10倍,就看到 b 收敛了
    5 P$ v& z" ~7 L) @3 x  {w , b
    + G- C3 R- i4 k27.002620697021484 14.8261671066284188 U: q' q7 L. j* F/ g' x/ b/ D: j/ v

      b+ I' y5 p( I! |# b和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-25 05:35 , Processed in 0.058542 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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