设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    3 W6 D4 I. Y7 Z3 T7 n: y
    % u2 i6 U8 A8 c/ K/ u% q) V6 j) K/ K为预防老年痴呆,时不时学点新东东玩一玩。, C# ]2 H4 R( E0 u0 J$ ?! F0 q5 Y
    Pytorch 下面的代码做最简单的一元线性回归:
    7 ]9 z/ D  G0 a" E5 ]( \----------------------------------------------, n+ A  y2 F* [# H, b5 d
    import torch/ A& k* t, r7 I
    import numpy as np
    2 B! }/ a3 k( z5 V* z4 mimport matplotlib.pyplot as plt
    " o, l  O5 D& d9 ~6 }import random
    # ^! u) ]) n9 S& T% g4 F* f
    : b% u  Q+ ]. I* W1 \; Nx = torch.tensor(np.arange(1,100,1))
    7 @: f7 V( ^" ]$ H: }y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15  V; R2 n6 }& P- a5 o; D
    / ~9 P% B. ]& e* X( ^
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b+ {; [3 Q  j4 b) x* u! @* ?
    b = torch.tensor(0.,requires_grad=True); R/ E9 I" W, V9 b& e7 z
    $ f( v% j- u5 E( r( K1 g5 a
    epochs = 100" |) R" A( f) R% |

    % c  O% Z7 I8 I1 alosses = []
    % k. L" h( X- ?8 Pfor i in range(epochs):; [' r3 I  H7 R1 X7 |, a
      y_pred = (x*w+b)    # 预测6 |) _0 i4 l. K5 J9 m& O0 U
      y_pred.reshape(-1)
    ; I/ O% }7 U% A( [( w , ?, k8 f8 |+ _, o1 b
      loss = torch.square(y_pred - y).mean()   #计算 loss/ A+ n- r9 d. N7 e# C$ R
      losses.append(loss)
    0 F2 n6 p: r9 \; n! m9 O  
    * _, E  W1 Z6 n# l  loss.backward() # autograd
    ! _; v' P- ?2 n' f. l6 o3 R  with torch.no_grad():
    : G: Y' U8 B% q; c    w  -= w.grad*0.0001   # 回归 w4 B& x9 ]- y) T9 t6 ^
        b  -= b.grad*0.0001    # 回归 b 9 z3 w2 h2 C2 L& m& I
      w.grad.zero_()  5 w' W/ {8 w8 j4 N) [5 S
      b.grad.zero_()2 b7 F' `2 T& u% M* F# O
    / o0 x! Y  t6 m, P. R
    print(w.item(),b.item()) #结果+ l- N& K: v# `7 H
    7 ?8 N" P- Z  B" T, x6 L/ S2 b$ H/ {
    Output: 27.26387596130371  0.4974517822265625$ Z/ Q/ r- O/ J# M5 i+ r+ q' Z/ H) i
    ----------------------------------------------
    % x$ P4 p& V% f% M( p( R最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。3 x0 ^% Z( R; R1 j
    高手们帮看看是神马原因?( l/ O( A1 z: \( Y, x; ?. _

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    ; f. B, B1 z2 V" x  @, t2 _, N0 g# v: _; M7 M
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?/ [! p5 x$ S! w! i$ j
    -------
    # z' t, R% g% f' G# ~不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
      k' p3 I. X9 a-------
    & j9 H" f+ l$ s" Q0 q7 \) K1 q算法诊断部分,建议把循环次数改为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
    ) p4 Z: _3 K7 V没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?6 r+ L5 C: r5 G  M4 g; [
    -------  U2 I2 l' ?6 W$ M/ Y- K
    不好意思, ...

    1 ^4 U. H( r5 A9 M谢谢,算法应该没问题,就是最简单的线性回归。
    3 F5 M0 e! S, s8 Y我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ' j8 J1 [* v7 i! S2 L, g* X
    雷达 发表于 2023-2-14 21:52, D6 P  M' `$ u) M. \
    谢谢,算法应该没问题,就是最简单的线性回归。
    ) C- L2 {5 G7 {我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    - l/ |. _. [/ n4 u

    5 C3 g# w1 n' z刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。' i3 f% ?- n2 q% M" E7 I" X( B

    5 m, [7 o, j, x' Q或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    3 l% ?+ ?% w* m3 d% y8 M9 o
    老福 发表于 2023-2-14 22:00
    $ k4 A- E+ r4 T. Z' d刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    0 c6 S2 c+ |- H# t
    ! p# I3 s1 p+ W8 K- T或者把b但的起点改为1试试。 ...
    ( |' ^' T# i- X4 L" k/ d' v5 C
    . F' R) `- P9 L0 S# S5 m! C
    你是对的。" |2 L" f$ g1 M& q) M1 u
    去掉了随机部分" @: Z/ s$ ^# G7 u/ C; z
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)# b4 J( [, z4 ^" p
    y = (x*27+15).reshape(-1)" l4 b6 [4 I  i$ s% p
    % R" U' C  _* H; |
    循环次数加成10倍,就看到 b 收敛了
    ( a/ _5 C% j/ W+ A# S" Tw , b
    ( W* {' N' k4 v* m$ B- k  ]27.002620697021484 14.8261671066284184 u/ q; L( `, ~# s$ R
    $ C0 m6 G& h9 T$ G$ [% v
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-7 05:21 , Processed in 0.059450 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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