设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 - _- @0 K+ x5 I2 `8 D/ |* P# X! G

    & H9 i4 h0 C. s. V0 d为预防老年痴呆,时不时学点新东东玩一玩。
    2 T- j$ D" j; O1 t: k; NPytorch 下面的代码做最简单的一元线性回归:; S( @  l- I" F8 {8 R( X5 p! c" g
    ----------------------------------------------
    ) \9 P: V1 s! y! w0 z+ H: Bimport torch7 I; U/ l" Y' N& W" z
    import numpy as np( A, Z+ D$ G6 H* }; q
    import matplotlib.pyplot as plt" S5 [) {% j  }0 F
    import random+ `) Y' d4 D% ^6 `, y9 ?9 {, P

    - X! C$ K% k; u  L9 Lx = torch.tensor(np.arange(1,100,1))
    - i0 B1 ~1 K  u7 K6 Fy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15+ S( r% K8 j6 A& ?# R7 `
    , u/ \7 N) R& d
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b# C, S) W, k0 J3 ~) V, d- n- W3 }
    b = torch.tensor(0.,requires_grad=True), Q* N4 S( T6 ?4 b/ P
    1 J4 j! ]3 ~1 C1 y* c
    epochs = 100
    9 u7 B) e$ Q5 |$ p" l; I% \- f
    7 b/ J& U0 ?2 x9 z0 E' E0 Rlosses = []
    # ~- p; {4 }9 Mfor i in range(epochs):
    4 _6 {4 S& E0 A3 j  y_pred = (x*w+b)    # 预测
    0 [) \: W5 }+ A  y_pred.reshape(-1)
    9 \$ s+ E; e3 g
    / m6 E; \# e: _4 G5 T- u' q. ?  loss = torch.square(y_pred - y).mean()   #计算 loss$ B6 p" L: W/ z' N  L6 ?
      losses.append(loss)
    ( A3 T, q; o' v8 Q# b6 q- M5 u9 T  + K4 `4 W* ^2 i! D$ o
      loss.backward() # autograd3 u6 K: y( a! a9 w3 G' H- f, H
      with torch.no_grad():# n+ C/ G) L$ q! \; c
        w  -= w.grad*0.0001   # 回归 w5 S; K# \- d+ X* b
        b  -= b.grad*0.0001    # 回归 b
    1 w. y9 p! E& o  w.grad.zero_()  
    - U3 O6 j% B& A0 x( a1 K1 z2 F  b.grad.zero_()/ i2 A6 N) W! M1 G

    3 x) e/ J% |9 S3 e* m. v& jprint(w.item(),b.item()) #结果9 i' Z4 i3 C: F' f# @) C$ e4 q9 p# Q, j
    9 E9 B3 x" H3 l+ e# m+ S1 k
    Output: 27.26387596130371  0.4974517822265625" S9 j# n# A2 o9 L  o7 K2 A
    ----------------------------------------------1 u3 o2 }. G$ l. Q; `
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    2 a) H/ B0 N1 O3 X' u( k# B高手们帮看看是神马原因?
    7 V; f8 u! e! P

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    1 \4 q, d/ S3 E2 Q$ P8 d  N! g6 j- l  s, H% r
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?' O. Y( G+ o! Q; @
    -------
    ! d& |9 b8 v# {* z8 z1 H不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    % V2 N- Y" T( m7 h-------7 c9 j- i8 A2 z1 ~, j
    算法诊断部分,建议把循环次数改为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
    $ d: k. O7 }1 X没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?1 e6 _! V0 i7 ?8 D9 F8 l% H$ e' z
    -------  A* ]9 f  t0 [+ ]2 t: Q
    不好意思, ...
      A( X+ T0 O1 I7 H+ E& }0 c) [6 }
    谢谢,算法应该没问题,就是最简单的线性回归。
    + @2 O$ \/ ~" ]! }' b- Z0 H我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 , a+ m" Z- U4 j4 A9 {5 H, e, G
    雷达 发表于 2023-2-14 21:52( b( c* z/ p% z1 l
    谢谢,算法应该没问题,就是最简单的线性回归。
    1 \, [' Y$ L- ]. N2 p% q8 F我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    1 l  Y+ K! {$ y
    5 m! B  q# [& e9 W刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。/ r. M* V2 d$ f+ |

    ' W% @( {' F* g7 e, y4 R或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    0 @; h" ^3 c9 y* r3 Y# j
    老福 发表于 2023-2-14 22:00
      V1 ~" {0 I  I2 G  w+ M刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      d' z/ M) B4 ?& N9 ?/ l
    / E6 T- j2 O' F$ D  ?7 H或者把b但的起点改为1试试。 ...
    - e; w) _/ z( h9 k) Q" l  K. v

    ' o2 Z7 g/ @6 v/ L4 ?你是对的。
    , v3 e. T& U7 L: T) L+ E4 e去掉了随机部分& O" Q0 N$ O1 A3 W, p
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    1 |& V7 i7 Q7 V6 n# e3 W' Iy = (x*27+15).reshape(-1)
    ! K% V* S! B! f2 a6 _6 W  [( C  ]' \8 K5 G) U$ w, \4 J
    循环次数加成10倍,就看到 b 收敛了, j+ e, g! r; W9 A
    w , b
    7 G! c$ s; J/ Y/ n27.002620697021484 14.826167106628418
    * D+ h. U" O! q" L6 F
    * R$ u4 B" ~$ v6 Y* Y7 O7 W6 k' M和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-11 01:50 , Processed in 0.058294 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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