设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    $ C! }( M4 d3 H2 ~4 J: M
    9 P" Z6 Q5 p! F/ |/ N8 c! f' U, X为预防老年痴呆,时不时学点新东东玩一玩。
    % E- ?: H7 _$ k6 |Pytorch 下面的代码做最简单的一元线性回归:  f# ~+ Y1 }' D. |+ X4 `
    ----------------------------------------------* x) g! V! Y: Q& M+ _
    import torch% Q8 j: W( S$ B7 @9 L8 M1 K- O  b
    import numpy as np
    $ o# i* R3 G' n9 aimport matplotlib.pyplot as plt
    0 _4 K% s! }, |! Bimport random/ g5 j8 g, W( M4 d2 a) @& W

    * b" B" K' r5 b  {. Wx = torch.tensor(np.arange(1,100,1))' h% z, `* w" A$ G% \
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15) I2 m* k( b$ b! J4 E1 X- E1 ?: @
    + d$ B* G5 G; p3 r/ ]# @: e! {8 j
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b* z8 J* Y6 ?  J3 b# b  k+ R
    b = torch.tensor(0.,requires_grad=True)7 {8 I6 C' F$ h0 h

    , s$ F+ c7 G7 Jepochs = 1003 P7 ^* i$ e: o, w+ Y; b
    ; s: I1 J% L0 s2 h/ a
    losses = []
    . W* a% x7 F- ?for i in range(epochs):
    7 s: }2 m1 Q2 v" w2 _  y_pred = (x*w+b)    # 预测
    - N5 X8 n3 `1 {; L8 w  y_pred.reshape(-1)- v: _/ G  Y2 g3 V1 D
    # k! l" {$ d( f; y! Q) G
      loss = torch.square(y_pred - y).mean()   #计算 loss- _: a$ I3 R3 Z
      losses.append(loss)9 }1 W5 ?) {  s" |
      3 ^% @& d( J0 Y' Z
      loss.backward() # autograd! I; C" h/ c) j' k- `# k, B
      with torch.no_grad():: j6 I3 E* h: r/ b% {
        w  -= w.grad*0.0001   # 回归 w; q' F0 ?  G6 m' {5 ^4 w
        b  -= b.grad*0.0001    # 回归 b ; G6 X( K; c, U7 @
      w.grad.zero_()  : p$ c* }) A! e/ k
      b.grad.zero_()2 N' X# U: t* @3 B
    5 c9 w. {" s* h# ?5 e6 n
    print(w.item(),b.item()) #结果
    + c9 v' A0 _$ [* W; Y
    1 t- f1 ?3 q! b6 s" G* @# g6 j+ vOutput: 27.26387596130371  0.4974517822265625
    + i/ D4 |9 B6 P8 D$ r) r----------------------------------------------6 P' b7 s! a7 P" X1 q
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。: b8 |! D) D4 j' L/ q2 N2 [/ n& E2 u
    高手们帮看看是神马原因?3 }8 u: Y( t9 W' F, f0 x

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑   u& ^* e/ m% T2 W7 L
    ( Y5 G' c; t4 Z2 M
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ) C+ U. V, M" ?/ D5 e-------
    7 q/ h$ {1 }8 B" [) r, {不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。! c4 `( [. Y7 N0 o2 g/ ^
    -------/ d7 p! M8 M( o1 j  T2 z
    算法诊断部分,建议把循环次数改为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" l5 N7 V' S/ p0 v, T# ]. t
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?5 x! ^, K/ ]5 I; D1 O' ^
    -------
    1 a9 k% v( L; l9 s$ }+ E不好意思, ...
    ! G7 c$ K' I8 V2 M: w  H
    谢谢,算法应该没问题,就是最简单的线性回归。
    5 t0 i9 T6 b0 m7 q. z0 l/ O我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ' K& Y# i6 j! j. R! U. x
    雷达 发表于 2023-2-14 21:52
    * ?4 f' S7 j, Q! v; F# B4 \. O谢谢,算法应该没问题,就是最简单的线性回归。
    6 E* X) ?) M3 A( k9 U我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    $ G) `4 w4 }& q; s0 C. c
    " H+ r; t+ V2 [1 [' {- a8 t刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。7 o" N& ?! U* f- @7 S

    - [, K7 l0 W( {* R- O5 u或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    & {! A0 N* a6 Y( |) p, T* g4 a+ ^
    老福 发表于 2023-2-14 22:00- @8 E6 F" M* L! f. d. X
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。" ]6 j1 @/ d, k" o4 ]9 \+ a4 ?' U

    2 d$ ]8 r9 D  f1 Y  p! L# h4 x或者把b但的起点改为1试试。 ...

    & u5 K! G0 A, ]' e# M$ h; Y. _6 q! Y4 S7 Q( j5 Y/ s7 T
    你是对的。
    ) N9 M6 A, k9 E- E$ C/ z* c去掉了随机部分8 P& i6 Y* L! k5 s/ s
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)- X& f* ~$ s# W7 f! Q# }$ A
    y = (x*27+15).reshape(-1)- l4 ~* p2 y1 G$ C& e

    5 I8 Z. c2 d' h0 W% C8 z循环次数加成10倍,就看到 b 收敛了* \, U2 X# }$ s% i6 }0 _( H
    w , b  b& M/ W- T* Q& w3 Y: X
    27.002620697021484 14.826167106628418: [  H8 T; n' j
    5 n4 C* i! x2 [* v$ ~
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-10 18:41 , Processed in 0.054246 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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