设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ) n* h( }3 w: s7 k. f; ?9 \0 g

    2 z5 N! ~7 p6 z  n/ M为预防老年痴呆,时不时学点新东东玩一玩。3 L* v/ ^( ]9 X
    Pytorch 下面的代码做最简单的一元线性回归:
    * R# w' ~9 p9 ?" z----------------------------------------------: ^: I" t' P; N
    import torch+ W# G0 ^- n+ M' F
    import numpy as np6 ^$ Z+ a3 O/ o
    import matplotlib.pyplot as plt
    1 h3 t: U! h- z- z  T/ Y) |import random
    . `& L  }9 z- T( v3 N* y* ?8 j, ~  Z; x  C: j$ b; u( r
    x = torch.tensor(np.arange(1,100,1))- |. Y7 r6 }" @) J8 v9 y( b
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    . f' R6 Z* R, W: {  i3 ~5 z
    : s6 @9 z. D2 i9 f  ]7 ww = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    4 Z5 M" k% c7 K7 {# C# O* `b = torch.tensor(0.,requires_grad=True)  s6 j' U/ l& r9 }/ |

    , p! P0 U! N9 ?  }$ }epochs = 100" J5 M6 h) S; t7 J& ]0 f3 n  O

    ' V3 |# s1 j8 A' D; Ulosses = []
    ( a; t/ E: e) u6 E- X" efor i in range(epochs):- v1 w4 R1 J0 G( }- s
      y_pred = (x*w+b)    # 预测4 U, S- \: o" ?7 |" G6 ]! ^
      y_pred.reshape(-1)
    9 S6 r# X2 }$ C4 q! N 2 f2 f+ d9 {, r0 [% [& e! c
      loss = torch.square(y_pred - y).mean()   #计算 loss0 P0 i6 E. S6 I% g* W
      losses.append(loss)
      q* v2 D1 v  \( s) [- P  5 c7 g8 ^; y7 \" g1 M; T# U, Q; Q6 C
      loss.backward() # autograd. Z2 m  h& H) x6 S* B6 [9 q$ a
      with torch.no_grad():3 c& Y  I) [. b+ F  o6 B  X5 z; Z  l
        w  -= w.grad*0.0001   # 回归 w( I4 g! h" S% Y* X
        b  -= b.grad*0.0001    # 回归 b
    # M4 v# o" y  m8 z8 C  w.grad.zero_()  / n9 T. K2 p! ?/ D- X! H0 u
      b.grad.zero_()3 i; a" G4 `, I2 I2 C

    8 `, w$ s  U" D( {( Yprint(w.item(),b.item()) #结果  L9 ]: q; ]2 s4 B3 g. v1 `7 ?
    7 ^" C$ y) y* U; w4 I. w
    Output: 27.26387596130371  0.4974517822265625+ U9 U% b, h9 O- m3 f! a" `$ ^
    ----------------------------------------------
    ) A8 L1 u$ F" s最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    6 |6 D2 S) F+ k" f2 ]  p高手们帮看看是神马原因?/ I) ]! Y) q( `% \- T5 r# L" c

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    ! c' K# N, f6 \* ], S" K3 J- Y- f& _) h3 y6 W; Q3 |
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?9 U1 L/ g- O' i; b: I
    -------
    ! Z) S# ?( B  [$ b' [不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ) i' K9 f3 L) s+ Q+ q1 y- @0 _# @-------! N# ~. O) J; P6 L
    算法诊断部分,建议把循环次数改为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: q, v" u( R2 }0 I; B
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    * d7 f! V; `2 V! V" e4 g5 h% h-------5 k  Z, c+ A9 O1 G3 z9 p' [
    不好意思, ...

    8 P9 |+ p+ t) k+ ?1 a+ O& T+ F/ i谢谢,算法应该没问题,就是最简单的线性回归。
    4 d1 x' P. F+ p5 ^1 Y" o7 u3 ~9 l我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    0 L8 v( M4 e5 b1 {9 z' s' _" j
    雷达 发表于 2023-2-14 21:52
    / a: Y3 k8 H) o+ C4 S谢谢,算法应该没问题,就是最简单的线性回归。% \4 W  i/ l0 G& G2 d. }5 U4 R8 Z
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    ( Q1 o  j; a2 \- C
    % a7 [: o# |9 \刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    6 E3 R0 v/ h, @8 b, w4 {* s
    1 a* E$ y7 Z' j' m) g5 E或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 6 j) m! N9 T0 f( C. y
    老福 发表于 2023-2-14 22:00
    . m$ U3 L4 x7 J7 q" G$ ?) c5 f刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    3 S& \% x; V* {$ h: e" f* {# c6 @& l" _  O3 I, }5 |; K
    或者把b但的起点改为1试试。 ...
    * O0 N1 k- b6 x% I7 n/ Y
    9 u+ ^1 h8 P7 ?5 K& H
    你是对的。4 V6 A3 B4 q6 e* o
    去掉了随机部分
    $ H2 J0 ~3 i2 l: O( V3 D8 p#y = (x*27+15+random.randint(-2,3)).reshape(-1)0 N8 V& }( `1 R2 \- k1 ~% R5 r* \
    y = (x*27+15).reshape(-1)
    5 r: }. Y; N1 x  n
    1 F9 e& f+ W2 S4 j循环次数加成10倍,就看到 b 收敛了0 s. D0 h! u1 W0 R4 Q, _
    w , b
    0 y3 _4 K$ u  ?: S( |# W( @  f27.002620697021484 14.826167106628418
      L3 G8 h' k2 H: [4 F8 c  p1 z; K# x% U
    + V- ~8 e; [* [6 r  N! I! c5 @和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-1 15:50 , Processed in 0.059942 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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