设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 8 b- @# j  g) b. e+ I

    7 x) V% }' U) m: u为预防老年痴呆,时不时学点新东东玩一玩。
    4 k- Z% V) S% @& z$ i- y! a( zPytorch 下面的代码做最简单的一元线性回归:
    9 Q! Z8 k. h6 p: X9 r----------------------------------------------* k8 x1 B6 g5 Y) e! s) u
    import torch
    ) h3 z4 F( j+ X5 H; L6 g% ?: Limport numpy as np: ~& r% J$ `% G0 g5 ^
    import matplotlib.pyplot as plt
    * w; n  d% D. V$ o/ U2 ^# t5 ]import random
    - {9 ~3 }! B' f! s# J! O
    " K9 B. |$ s! V6 B4 k  l! {x = torch.tensor(np.arange(1,100,1))
    9 @  {8 t$ R+ v( py = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    4 L; q$ L  ~5 E5 ?  o! t2 Y* f
    " F% J; E* @" h" Z& r' U/ F# }w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b) v% \1 ^5 q7 H: g4 b
    b = torch.tensor(0.,requires_grad=True)
    5 q9 o& c. i$ S7 O. ^: Z' {. c+ T) ^. M' T7 x. B
    epochs = 100
    + t# H' {& \2 d, s+ y) h& T; M9 l$ C5 A
    losses = []% o7 }5 ~8 `/ d& M
    for i in range(epochs):1 U' M+ S% [* a& d6 k( \$ O8 T
      y_pred = (x*w+b)    # 预测, |* p9 g+ ]3 a* V
      y_pred.reshape(-1)
    + Z* [3 o) Z3 i+ D+ Q
    # s' h" `; Q; C- i9 \  w  loss = torch.square(y_pred - y).mean()   #计算 loss' m& h# W; u: I. j# s/ w. V& Z
      losses.append(loss)
    / ^) ?4 j/ h. s7 m% {  ! K# o7 H7 ?' _7 o" R4 N
      loss.backward() # autograd
    $ r, {) r* n: c2 s" e  with torch.no_grad():: }+ L7 g* L5 j
        w  -= w.grad*0.0001   # 回归 w# n( z* Y: _  O: f3 a" }
        b  -= b.grad*0.0001    # 回归 b " F3 i" R* |% n6 w$ q
      w.grad.zero_()  
    ( W2 n( B6 b9 l+ f2 z9 r  b.grad.zero_()  W8 u1 L1 G% o& W7 j

    ; ?8 D, J) E# o/ F& H7 E& a5 t9 w8 wprint(w.item(),b.item()) #结果
    . R7 u' S7 ~) f( `
    + z1 h9 j- z% m8 Q: j' F" XOutput: 27.26387596130371  0.4974517822265625
    ) o3 U: `5 P" C5 I----------------------------------------------& g' v$ D9 g6 i8 h; A
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。  w, U* V9 P" y: a7 }0 s
    高手们帮看看是神马原因?
    8 q* a) h$ l2 E1 x+ C- e4 t

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    7 _% k9 f( D3 f, p/ U8 a4 E# }
    " B+ S) A) v) ]' Z9 \( Z没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    9 P( ?, @1 C. j9 o- o0 D6 \-------7 C( f! z! _; l9 F
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。/ V2 T0 \, e* X7 D
    -------
    $ s- h5 g, ~* }# Y算法诊断部分,建议把循环次数改为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
    - G% k. e7 r0 ~# a% M5 ]6 e没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
      U% y+ l8 Z+ ~-------$ j4 v5 K) e- M4 J5 e3 @
    不好意思, ...

    " a/ y) A( x/ `" ]: D( C谢谢,算法应该没问题,就是最简单的线性回归。5 ~& b; W: X/ e4 o/ B
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 4 D9 k' E- B$ B$ x' Q
    雷达 发表于 2023-2-14 21:52% _0 a( g7 t" Y- b' c
    谢谢,算法应该没问题,就是最简单的线性回归。
    % c' z7 k, U5 V8 X我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    : @. |1 }) x# E2 ~. Q+ t( b% z8 i. R# }1 ]2 S8 X4 r
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. u1 a4 e( d# T' S8 V/ k" o

    + l: B) u  J& R; j! ?; R' Z/ T或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    4 ^" N6 F5 U% ]% a  @1 d3 h
    老福 发表于 2023-2-14 22:00
    9 O4 i3 w/ \  d+ Q- c# @7 _刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。% P: \3 |3 S' {- V) R

    : t4 g' Z0 Z1 Z或者把b但的起点改为1试试。 ...
    - A$ s# n) W, `6 c

    & U  H7 U+ \- M0 r你是对的。1 @0 N( L! k. y7 b9 @, G
    去掉了随机部分& a  I. M/ C3 b; R5 q% {) H
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)- L) `7 m9 D! R0 A* J, H. N
    y = (x*27+15).reshape(-1)
    3 X  |! k* h/ `) F( `. N# _
    % o5 {0 b. z" A8 t, @9 N循环次数加成10倍,就看到 b 收敛了: ~/ \5 D3 d0 ~' k6 j
    w , b& d% V. `8 S& e5 z0 J0 `9 f
    27.002620697021484 14.826167106628418
    ! p0 T- y& o! s2 ~! y: q! k* v; D) ?6 L+ p0 e1 U! h
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-10 08:18 , Processed in 0.027978 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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