设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    2 M/ X; b3 g# Q2 }$ a! l
    4 ~, c' a- V$ B1 Z0 [" b为预防老年痴呆,时不时学点新东东玩一玩。
    6 Q; l/ B( @+ G$ d( X+ o% dPytorch 下面的代码做最简单的一元线性回归:3 s4 B' A, e1 E5 W: N
    ----------------------------------------------: k* f5 j( o1 e4 Q# T; R
    import torch  G2 d0 |6 F: }9 k# h0 m
    import numpy as np' N/ _- X% ~1 R5 Y% C
    import matplotlib.pyplot as plt
    / e- \3 F2 R# Y2 _2 ^import random% z+ g5 h) k' ~( L+ P9 [& O/ M' y; }1 Z
    3 T+ D+ w' _6 r. _( W; u+ P
    x = torch.tensor(np.arange(1,100,1))
    ; o1 X: @+ B! D+ v3 iy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=156 R9 ^* b0 b- E  r' T4 ?
    7 L1 J" \- s# o& k
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    4 G( V% V( {& L! i5 T" jb = torch.tensor(0.,requires_grad=True)+ M/ B5 N+ Z9 f# h; H0 f% M0 O8 u

    / j% ^; A. o, R' |epochs = 1005 }; t) Z' ]$ q: W6 I$ k
    2 g  S& g' I; o& B1 L
    losses = []
    ! r$ @6 p3 z! z; Rfor i in range(epochs):( R- _3 I6 }0 _; \7 Y
      y_pred = (x*w+b)    # 预测
    , o' `/ q  l+ R  y_pred.reshape(-1)  L( h1 g( k. n$ W; p
    " Q( C! m3 _: g% g3 G
      loss = torch.square(y_pred - y).mean()   #计算 loss) `* y' O$ d. I. b- V& f
      losses.append(loss)
    - D9 Q. m4 x% I3 j  
    & b! E9 ], N6 q, B) P: `  loss.backward() # autograd
    8 Q* e1 i, D5 X: D. O- \  with torch.no_grad():9 u* n( r8 `, q9 }9 _7 m# _( p6 M
        w  -= w.grad*0.0001   # 回归 w
    6 w3 s- g( C3 U/ m: o4 L2 q' t; i    b  -= b.grad*0.0001    # 回归 b ! Z; h- @& `. d( N
      w.grad.zero_()  1 F% |- J. I$ p- C
      b.grad.zero_()/ L  O) a0 @3 R1 |* v

    9 Y2 ]  o( Y7 e! T& ^( w: nprint(w.item(),b.item()) #结果" ?2 m) N8 q8 f/ I

    7 M$ ]& T& i9 k5 O% V1 ~) `& ~0 qOutput: 27.26387596130371  0.4974517822265625
    ' I2 ~; u- N0 |----------------------------------------------
    5 R, a5 [* U& k9 l& t+ S最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。( T& Y" [! n! e2 L: u
    高手们帮看看是神马原因?; [* R1 z1 x* P8 {$ @7 F

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 . d3 i. b+ M$ r  J, f
    ' ^$ L  v7 D3 ]. U$ j3 H* H! ?
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  K" i' H5 r4 o7 h& z" z
    -------. f* _8 i' o; l
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。' W, v9 M, p$ F7 F! a: O: T
    -------0 `0 K$ o6 R2 ]7 q8 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
    & U! m1 w6 m4 j  E* x; i7 w- e没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ; J) o$ S7 O5 ~: G-------) D) ?. ?: H+ D4 @) f  B+ j
    不好意思, ...

    + v' j7 I2 _# J1 p6 N, a谢谢,算法应该没问题,就是最简单的线性回归。
    4 Z, R, S6 ~7 M, T/ \; E" n我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 ! M& X" X3 a. y; c3 X+ F* b
    雷达 发表于 2023-2-14 21:52# ~3 P, `7 {% i' c' S
    谢谢,算法应该没问题,就是最简单的线性回归。
    ; S6 c7 y2 P1 w  V/ J我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    . Q$ n( b2 F% i8 _5 g. J8 ^) r; m( J

    1 X" s: K2 N+ i1 F刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    * S. S& M2 |% w( Q  g
    0 o* F' Z& ~3 @; b; H$ G或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 % u, _4 ~5 N9 E
    老福 发表于 2023-2-14 22:00
    $ D9 J3 P$ N  F1 c: a0 `刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。1 ?  J9 n2 q% p5 g* \+ O. l' p) C& ]

    8 f7 c& J4 Y& H8 P: u# t或者把b但的起点改为1试试。 ...
    & @8 {4 E4 g3 B1 f3 }
    - X- C& L6 m3 U! x. n* k9 X
    你是对的。
    2 R) _: r+ A4 g- H去掉了随机部分
    1 w2 x( S! L% K+ {* }#y = (x*27+15+random.randint(-2,3)).reshape(-1)+ f) i* o6 T+ M, R
    y = (x*27+15).reshape(-1)6 J% M' ?: _) o. l* W) e' O
    ; d' h' _1 Z6 A4 i$ L( e. |* ^/ x
    循环次数加成10倍,就看到 b 收敛了
    * M* |. Y" |( ?5 ^- p7 g1 Yw , b+ x2 C% N' D0 e
    27.002620697021484 14.826167106628418
    - D6 Y3 Q. G: b0 |" Z$ t! d) l; U1 r. L
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-5 04:31 , Processed in 0.061419 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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