设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 , j" w% w+ f" `0 O  o" Y. e

    8 k: ~4 O. |9 T* f, R* g6 X为预防老年痴呆,时不时学点新东东玩一玩。" ^+ e! Z( c6 G7 y
    Pytorch 下面的代码做最简单的一元线性回归:1 _: Q4 n1 w+ r! u" M
    ----------------------------------------------
    ( L) n# O* k) a/ Dimport torch! E' ^% \3 w$ N0 `+ H1 \
    import numpy as np
    5 }% i: Q7 ~1 |5 |* timport matplotlib.pyplot as plt+ M9 ]2 r7 q* ~+ f* \4 ?+ A. G
    import random
    . n& y( X/ ?4 Z/ a1 x8 u5 N$ \; Z  a( w6 ?2 t7 l
    x = torch.tensor(np.arange(1,100,1)); z( F6 H: i/ y: ^' R3 I$ B1 l
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15& |, v& i9 H4 `8 K. k/ c
    ; n7 h4 E8 ^4 d# f
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b9 f" G! _1 O, P
    b = torch.tensor(0.,requires_grad=True)
    % S+ E5 @" S5 J; `/ c
    + q' f+ k. X0 Gepochs = 100" j( Z0 I/ i& ~, T% A2 g  W

    ! B/ `8 k/ Z  @; i* [& V; Hlosses = []
    / X& W: a* y8 t# C: ^* C; w. Kfor i in range(epochs):
    . ^8 k  d4 N; s) V/ q  y_pred = (x*w+b)    # 预测, H4 u. c6 S; G8 l: b
      y_pred.reshape(-1)
    4 a7 @* f* K8 j) k) T
    , M2 Z. ~. i$ H3 E, c  loss = torch.square(y_pred - y).mean()   #计算 loss
    ( G/ K9 }' N5 ^7 F  losses.append(loss)
    0 y2 A! z5 s& n1 T9 d  
    ' o0 ~' v5 i- z/ Z$ C$ H6 B/ s  loss.backward() # autograd! F$ k$ e# T4 K/ o5 G9 j
      with torch.no_grad():9 f9 V+ S+ m$ S; F- w4 w! Z' N
        w  -= w.grad*0.0001   # 回归 w  p% s8 a1 o2 y5 t; K4 D, }
        b  -= b.grad*0.0001    # 回归 b ; ~: d$ o: F4 U& O
      w.grad.zero_()  
    " N! e/ |# G6 C  b.grad.zero_()- N2 t; }2 g, a1 f) r% g6 f" y' [7 @

    3 l" R" n* V+ x1 r) Y. y# G! tprint(w.item(),b.item()) #结果6 |) V; i  ~5 q6 K

      b+ [4 |. r# r# zOutput: 27.26387596130371  0.4974517822265625
    / t2 `* t& d. m- F0 K----------------------------------------------0 }$ G5 p( K4 x  m4 n4 r# z! i
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。* C- h/ D' {. i) W3 `
    高手们帮看看是神马原因?0 m3 S* V$ O& U+ u8 o

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 . j. j* O2 W( q% _7 {

    7 [4 O9 ~' m% G( E# C/ @5 {& b: _$ c没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?, D  Q3 C8 ^7 {6 [7 \4 P0 I
    -------
    , Y  ~) B) ?. i- x+ Y0 C& R% N' v; @& d不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。9 m: Z( ^; P  D7 F
    -------
    * Y6 a1 |3 L( D) k* k* Q0 x算法诊断部分,建议把循环次数改为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:235 z& a3 D; G' N9 x
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    " b: W: D, I6 o8 z$ J-------
    ! \3 r! }3 k. o1 ]* |不好意思, ...

    ' H6 H: f/ _: w谢谢,算法应该没问题,就是最简单的线性回归。
    2 w. b1 C; [# s/ v0 M; d我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 ! {! I# B8 a/ h+ k& u$ A, J! r. [
    雷达 发表于 2023-2-14 21:52
    % z6 W+ k8 H* U+ c( G; u谢谢,算法应该没问题,就是最简单的线性回归。
    9 H  f$ ?# C, `5 R我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    , g4 R- c# d" W# P
    ; `9 v9 H  l$ Z7 V刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ; A' z5 M9 N: _- N: v1 ^; o8 N7 H' E& s* t4 r
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 4 e% O6 \9 F0 P/ ^1 Y
    老福 发表于 2023-2-14 22:00
    ! m2 `* r; j6 Z- C9 q刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    8 R9 O8 O2 g& z7 `' p
    * Q3 |9 l- l2 `9 h1 t2 p" m9 [或者把b但的起点改为1试试。 ...
    7 \# D! M+ V$ ~  w$ @% n7 i
    # E4 x) g% W" Y2 Z
    你是对的。' g; X6 Z. W! L' `7 `4 r
    去掉了随机部分
    & v/ @, f" y/ C7 {+ T. X+ {#y = (x*27+15+random.randint(-2,3)).reshape(-1)4 i* ~5 q, L" y
    y = (x*27+15).reshape(-1)
    6 Q, t& k: m, _* k. J; h  S
    8 h  e2 K; }% @" d8 o循环次数加成10倍,就看到 b 收敛了  M9 d( ?: M4 v* T7 G4 p9 N
    w , b3 d* b3 {* A5 Y$ _, x# q- n
    27.002620697021484 14.826167106628418
    ( o7 y4 {+ w0 C3 K: S) C1 x2 }
    2 B7 L9 p/ r! H; h和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-4 10:24 , Processed in 0.030484 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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