设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 7 f. W- P9 A- ^* v1 p
    0 G1 t0 g5 U0 _6 h1 n
    为预防老年痴呆,时不时学点新东东玩一玩。5 w1 ^. X' ]0 E4 @
    Pytorch 下面的代码做最简单的一元线性回归:
    6 X- Q' F  |; g2 i) x( V----------------------------------------------. u& k; n3 |. l; K9 C# G! Q
    import torch/ M# g% ^) X* w+ A2 r
    import numpy as np
    3 [1 T7 Q' H6 p& ]) g2 O1 Yimport matplotlib.pyplot as plt
    6 b, G3 h+ e$ p3 _+ b1 w* b" t: h% e- Nimport random# t% W4 Z/ M  N' A( R

    . S2 x5 [9 V5 i0 Xx = torch.tensor(np.arange(1,100,1))1 `6 q7 O% V/ ^) b- l3 B
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
      @# V8 s; _% V5 R+ d
    $ v3 Y0 D& Z. l3 e3 Q) Zw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b6 o# v" u- P1 ]+ C  d
    b = torch.tensor(0.,requires_grad=True)
    5 V3 J* c4 G: R4 ?
    1 Q1 l! d' p, bepochs = 100
    * u- ]  _1 e: [2 {  @: d5 X$ m& k1 _' M7 V# }
    losses = []
    + A$ y3 ^5 D/ \for i in range(epochs):) M; Y" C; v. t" g( L6 N; l
      y_pred = (x*w+b)    # 预测/ P' n( G' ~9 S1 L( e
      y_pred.reshape(-1)3 W' e! @3 C3 W% P8 B2 k5 `

    3 d" Y) w4 r7 o' i" i6 l  loss = torch.square(y_pred - y).mean()   #计算 loss# F' U! d% n* l  N7 @. G
      losses.append(loss)0 z  d; L( N! c3 B9 c" ]. h4 G
      & h8 Y9 k0 O8 c3 Z) |
      loss.backward() # autograd
    * n. S: X- \: P9 H3 h8 ]  with torch.no_grad():- g5 d1 V. s2 f5 l0 j
        w  -= w.grad*0.0001   # 回归 w8 F) x3 W+ s, `, ^1 G
        b  -= b.grad*0.0001    # 回归 b # I& |) R1 K5 n! C5 U
      w.grad.zero_()  6 x$ A4 {& ]. e+ W& O
      b.grad.zero_()- K9 `, h5 j' w- ^) Z  {0 H
    + a3 B% M# c3 N2 y7 I7 [3 n9 h' X
    print(w.item(),b.item()) #结果. g! H( R  G' N. ?
    9 w+ l+ B7 z- [) t3 P0 t- O: D
    Output: 27.26387596130371  0.4974517822265625* f/ e2 U" u9 Z$ a  d" x+ |; P
    ----------------------------------------------  L; K4 f2 \( \5 V
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    " g* d3 z" O0 Q* A' K0 _高手们帮看看是神马原因?+ h: |" Q* d* W" f$ Q$ q0 C

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 2 d) a4 E6 z1 C# i9 ?1 K0 \# W9 P
    / G8 R1 X' n% Q
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    5 i) U2 a$ B! x! t% F-------
    $ W# ^! i: b( W7 Y# u! K不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    1 D, I4 B/ O5 _7 o% H-------! p, K  j. s9 {# i" h( D& e
    算法诊断部分,建议把循环次数改为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
    ' t& b% @+ F% H! Z没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?8 l: E$ O  b5 {& K$ |6 l8 R/ |
    -------. M7 E% t  T5 q' }
    不好意思, ...

    / G3 L3 i0 X) g# _4 r/ O9 \( S谢谢,算法应该没问题,就是最简单的线性回归。1 [1 i$ B1 {( N3 D8 D+ o" m
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 8 T$ C! U7 @/ R
    雷达 发表于 2023-2-14 21:52/ u  f' g, Z1 F: X3 b$ @
    谢谢,算法应该没问题,就是最简单的线性回归。) s0 X* a6 o5 [7 U% P
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    # P4 c7 H1 m( Y/ W4 p

      D: q4 _7 O5 N( m6 i刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。" I; w, o1 Y2 j5 g! B/ x6 `" |! h
    9 X4 [# Z2 s3 r7 _2 G, ]  s) h
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    1 A. |  J/ E( k, _- b
    老福 发表于 2023-2-14 22:00
    7 |* T; n& v6 q# I1 K刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. _4 V' y& [/ f' P2 Y  ]
    ) o4 O7 ?! H- `0 t2 m
    或者把b但的起点改为1试试。 ...
    . y8 a3 b. W, t& k5 U+ C

    7 c# T; A! V5 N3 \你是对的。) r* G4 v1 t& u& V- Q5 u
    去掉了随机部分
    / R5 X4 R% I5 W#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    + G, s! h' m2 d+ f6 {& _y = (x*27+15).reshape(-1)3 H; T5 m0 N3 t
    5 l5 N. }* V6 U  P
    循环次数加成10倍,就看到 b 收敛了
    0 y/ \9 E# y" L+ @# B0 d' C6 dw , b9 \' c5 M4 B# ]
    27.002620697021484 14.826167106628418: x5 Y+ G; D5 [9 J7 {
    & U3 K3 N( b) U* M. @; U4 f
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-10-17 00:44 , Processed in 0.063683 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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