设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    . ?( y; ]( m. Z" Z# C+ ?, `4 `: u
    8 }4 x4 ?' \* l3 b+ M为预防老年痴呆,时不时学点新东东玩一玩。
    8 N: w5 e& ^1 G8 k4 n, OPytorch 下面的代码做最简单的一元线性回归:4 H2 d2 J" ^: F4 I& g. y% H+ A
    ----------------------------------------------
    & s1 W) H5 G6 d. ]+ |import torch
    4 [' c4 e4 v6 Z  W: o0 fimport numpy as np' }3 [5 }- T; X$ p! `' Z, M& W1 c9 }
    import matplotlib.pyplot as plt
    - J" J8 e$ J" C3 z2 d; Qimport random
    8 B4 [4 M, c( i4 U) m. Z9 O$ S
    0 N% j& c+ a- a  ~2 r  }x = torch.tensor(np.arange(1,100,1))
    ' f2 K% X. T( ey = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=157 v' B: s7 [* [' \" v
    * M5 U: a# V8 c( ?
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b$ k( W6 Y- b( N. t6 J: V
    b = torch.tensor(0.,requires_grad=True)6 _" q$ A# q8 i1 B& P5 V% N# {  e

    6 ^- o" m! x& G1 Depochs = 100
    ' B1 X' q' I0 ~8 M1 z) z
    ! I8 \% @5 J: \9 ]8 D6 plosses = []/ I2 n5 D( `2 A% M
    for i in range(epochs):) N3 {0 W3 B2 S
      y_pred = (x*w+b)    # 预测+ l% b* A3 z: b& e8 j4 P
      y_pred.reshape(-1); X( J8 L* k, B  t" q6 D

    2 i6 n* @/ X5 Q1 C2 v( I9 F5 b4 Y  loss = torch.square(y_pred - y).mean()   #计算 loss
    6 |8 x& I  s" W2 w* l+ x0 K- r  losses.append(loss)
    " s# l' K/ L# T! o6 P+ ^$ I$ ~2 V  9 U3 q4 L& F2 q+ M
      loss.backward() # autograd
    ; ^" p- `" m' o. G0 C  with torch.no_grad():
    ! e# Z8 R" p; `# Z& Y    w  -= w.grad*0.0001   # 回归 w4 b! D* N' I) @$ U
        b  -= b.grad*0.0001    # 回归 b ! Q3 h- [! k( q. |  l
      w.grad.zero_()  : p1 y. i9 S9 J9 i  g. p$ `( f
      b.grad.zero_()8 ]# }! y7 D9 {! L2 U

      F( m/ s( Z3 v: d' v: ~print(w.item(),b.item()) #结果
    # k1 ]1 L4 ]1 S+ m# ]' V
    1 e8 ^2 v3 B: V: GOutput: 27.26387596130371  0.4974517822265625
    ) x# E4 G- y9 b( J1 v----------------------------------------------! A1 I5 ]' \- M% j5 X! J6 n9 E+ H# t
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    & U+ S& g  I- _1 I% {2 R/ G4 _高手们帮看看是神马原因?
    ; i/ v/ k: \6 z. J

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 $ M: |) f) m! N

    ) b3 ]) S1 S5 ~, s8 w3 q' e- Y5 D没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?$ }& b3 q0 n$ t! O5 \6 J" n4 x) f) \
    -------6 W" c8 C* o$ ~! D
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    " _0 Q; w: q- m# \8 K) |-------: o6 |5 M9 C  d, }
    算法诊断部分,建议把循环次数改为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:233 S6 e. H+ N3 X3 n" j
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    . Q, q, j2 f" d; i2 y-------+ h' ~8 v/ j6 \
    不好意思, ...

    ( G; T- g8 _2 N( p1 q# `' I谢谢,算法应该没问题,就是最简单的线性回归。
    & r9 K) p  V8 _% M我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ; F& o$ E6 N. m7 I
    雷达 发表于 2023-2-14 21:52) r% W3 c8 x. g: x
    谢谢,算法应该没问题,就是最简单的线性回归。
    5 C9 a) x3 C, b2 j! x! R2 ?我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    $ g" c8 H& A) i# M/ `9 ~: P) H1 D) ?, _- D; Q
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。7 T. r5 v% V" g! \. s

    * w5 u" B" j6 u( z或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 - \3 M. x4 c/ }4 E0 Z2 u* a
    老福 发表于 2023-2-14 22:00
    ! S! ]+ A# u9 O- G3 ~0 c& I刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    , S9 }/ J( P0 q; w% d* a1 C/ x$ p2 @( \: q, e
    或者把b但的起点改为1试试。 ...

    7 u0 L7 ^( k% O+ B6 K; k# M; z
    ' d! T% h. S* A& S- R4 z0 t你是对的。4 T  [+ U0 \& W( w8 U+ @: T
    去掉了随机部分, f7 y4 M- V! N! M; V+ w( c) ?/ Z
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
      a/ m2 b! S- j$ X2 wy = (x*27+15).reshape(-1)) U8 z  x8 B! J* T
    ' Z- Y+ ]: v- j) t. \4 ^* s
    循环次数加成10倍,就看到 b 收敛了4 _7 ^- u  ~; {6 y
    w , b
    2 o# r$ |1 `9 d/ w' ~6 J27.002620697021484 14.826167106628418
    " \6 [8 O- ]: ~, m9 m3 A2 Y) N0 a# C9 q3 |1 M/ N! e8 g8 j6 Z
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

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

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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