设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 / y, R* Q$ M2 \0 U4 n" m( @
    4 {6 G' n7 D; }3 }
    为预防老年痴呆,时不时学点新东东玩一玩。% d- q% l, t, r7 M
    Pytorch 下面的代码做最简单的一元线性回归:  V( I; u# w& L& y4 P
    ----------------------------------------------  r% B) _# _( l7 V7 Z$ p% V
    import torch
    . d+ ?' r' ~& Jimport numpy as np
    ( `, n3 @0 B0 Y5 K( _( M: bimport matplotlib.pyplot as plt; Z! F! f1 A4 X  R" `
    import random9 P. ]+ Y8 n- G

    $ ~* s" o* \* H4 d9 n& y- gx = torch.tensor(np.arange(1,100,1))
    / H' g, P9 A3 G% P- B7 O/ {( \/ Wy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15& t; X' M5 l, d

    & Z6 k/ K, R/ X" h& aw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    0 B) c# w7 l& a2 m3 Lb = torch.tensor(0.,requires_grad=True)
    / @. f7 J1 c  l7 }* j* f1 H5 l& W* o* [) C5 p1 I  L; c0 }" q
    epochs = 100
    6 i% ?2 t/ t+ [6 E( f: @9 \# t  {1 m$ D& w  G
    losses = []$ A( v7 C' `1 f8 G
    for i in range(epochs):$ o- u7 F1 j# x9 h/ @
      y_pred = (x*w+b)    # 预测
    5 G7 P8 F# v# w/ a  |  y_pred.reshape(-1)6 \+ ?5 _0 ?2 I' e

    # E; U, w( B- l. ^& ~. A  loss = torch.square(y_pred - y).mean()   #计算 loss# y, \- _1 Z& ?- L+ I
      losses.append(loss)+ w: X. v$ k' f/ d1 e9 N
        d6 D) |+ o7 g8 b( }
      loss.backward() # autograd
    0 G4 k& P+ ]* m7 R7 l1 L  with torch.no_grad():5 s; ?  g# w6 `7 ^3 m
        w  -= w.grad*0.0001   # 回归 w5 |) P" N8 j% r! K2 [
        b  -= b.grad*0.0001    # 回归 b / @5 c, Y8 Q, m  @& V  x4 }
      w.grad.zero_()  
    : s: n4 v7 K; Q  }* d3 _9 F  b.grad.zero_()+ z/ w+ p! z* E$ I
    6 @/ ~7 V9 F+ e4 D3 `
    print(w.item(),b.item()) #结果
    / k" n5 H  e; o' r3 g# w2 i4 v1 @7 a* ^
    , L- H* h: z, q: r, tOutput: 27.26387596130371  0.4974517822265625
    ) }+ V/ y7 D7 S; S/ V6 R6 F----------------------------------------------
    5 s+ J$ ^# ~+ c! l3 \4 J最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。6 F) t+ H8 w3 e$ J
    高手们帮看看是神马原因?: A7 d2 C; o; z# L

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 * ?$ \  f0 w: A5 R
    3 |1 v/ d8 w* X
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    5 M" ?# T' s5 [-------
    $ Z3 }4 l1 D1 |不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。  B( O1 P& O* ?! `
    -------
    * I' E& [: [) m; O5 ~6 C3 ?算法诊断部分,建议把循环次数改为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
    ! W0 U9 q3 ~1 V: ~( ]9 `没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    % a" J* a0 o2 x6 W: i( C6 E-------  c3 M- R# Z6 y! E6 i
    不好意思, ...

    2 G; d5 H  r) S6 z+ B) {! h谢谢,算法应该没问题,就是最简单的线性回归。
    & g7 j$ _, J' y# z9 z+ U  o我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    : v& e4 V: P; W; S* h* |
    雷达 发表于 2023-2-14 21:52# U. V4 k6 \5 w. P) P. W% J
    谢谢,算法应该没问题,就是最简单的线性回归。
    * M, e0 h; T+ u- \我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
      u4 w2 O& \. y/ x; E

    ! l& f  K% X4 H& c( {$ m6 P% E刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. y# K+ |# L6 F; `

    : e7 A$ _2 {1 S$ H3 N7 S或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 / a2 r' \8 n, d+ H' J  h
    老福 发表于 2023-2-14 22:00
    8 R. P! s+ m* W. D! n- T0 f/ r; P刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! E0 P% N0 L  h* S) ?  ^

    8 x2 u2 W5 P& M! A) Y: p1 u% J或者把b但的起点改为1试试。 ...

    2 d8 C) A/ V: f% O$ `! L
    - X9 k* Y% F* O+ ^& V你是对的。, T5 x: R( M) l( N' a8 `3 {1 x) ~
    去掉了随机部分
    - j8 o5 H1 Y) R) f#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    8 h* o0 P) W* Y. P( \y = (x*27+15).reshape(-1)9 Z3 c# V* Q# [
    $ h/ @; l% k3 c
    循环次数加成10倍,就看到 b 收敛了
    $ }: q+ n6 T5 \7 z1 Qw , b7 b. w5 |1 b1 ^1 D
    27.002620697021484 14.826167106628418
    6 X* e6 V4 Q! v3 l) a/ h/ g, a. [5 p
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-14 23:17 , Processed in 0.062716 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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