设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 7 M9 ^3 ]8 ]  n0 `5 d$ n/ Z

    # f6 {8 c! P* j: J6 w3 D为预防老年痴呆,时不时学点新东东玩一玩。
    ) T: x' p1 B" MPytorch 下面的代码做最简单的一元线性回归:  ~3 L& |  {& A1 v
    ----------------------------------------------
    , ~, S8 B% d- p/ f& a0 f: timport torch) u: u: j7 `, c4 K9 t& O- `
    import numpy as np
    ) k  r# U2 i. V2 J: b( simport matplotlib.pyplot as plt
    : [6 c; Q8 \1 Oimport random
    # f: F! F* y9 h3 D: \9 X9 B
    ' l3 f( j3 X+ f( nx = torch.tensor(np.arange(1,100,1))8 h7 [) P5 Z/ p
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=157 Q, h- I  F8 K$ @; Z( P+ j  ~

    2 ~# H2 i& q+ ?) B% u# A; }w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b( l0 v# s4 f. b+ J, O& m
    b = torch.tensor(0.,requires_grad=True)
    ( [. K+ o8 d, J6 S6 Q: Z7 m# h: C2 i( V1 H
    epochs = 100. }, f! R$ \$ o( W" e

    8 K; m! W, K4 P5 w- p. T' rlosses = []- s' a7 N2 S6 ~" v0 q: @& h# N
    for i in range(epochs):: X3 x$ s0 r, r) l  g
      y_pred = (x*w+b)    # 预测
    ' B9 l+ ^: M3 j' Z6 A7 @  y_pred.reshape(-1)
      V: h& X2 B$ E$ w
    2 Q& Y' g, a; w/ h  loss = torch.square(y_pred - y).mean()   #计算 loss0 i- E4 j! f# ^5 q5 w8 R
      losses.append(loss)
    9 Y5 T( p' f& v0 X8 |* n  ! j5 |. c% E, s
      loss.backward() # autograd8 t( N4 n9 O$ m+ c5 J9 Z
      with torch.no_grad():
    $ Y* L0 h  ?3 J% t4 e    w  -= w.grad*0.0001   # 回归 w
    - [" O" @! n  K3 N) ]* c- D    b  -= b.grad*0.0001    # 回归 b
    6 M; X* h" \- u$ a  w.grad.zero_()  % D  R& i$ @) ^9 Q7 h7 h* |- R9 K
      b.grad.zero_()
    # N2 U4 a3 I, M( ~* ?$ K. s  Z* i1 L. j
    print(w.item(),b.item()) #结果% U4 U( H8 n2 s6 e1 C0 P% C% s
    : G4 V5 S) v; J" e/ I4 }
    Output: 27.26387596130371  0.4974517822265625
    - S# e# }" R) w! I5 Z1 t5 P. c) @0 G----------------------------------------------
    ; h) Z8 I7 ~% m- h5 l最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。9 O; N7 p8 A* B/ t
    高手们帮看看是神马原因?
    ( t- Z6 X7 o' O7 h. f, L! A

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ' @& K6 H" ^0 k1 R2 x; i/ y+ H, I

    + `/ A3 J8 b0 N9 V3 {/ B: k没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    5 o: K' w5 Z2 n; E/ O# X-------
    2 z  B$ |6 K/ Q5 P* R' g6 T2 ~- x不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。+ @$ D/ {: x" j) U
    -------
    0 w( T' x4 H& x7 x: w+ N算法诊断部分,建议把循环次数改为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
    3 Z$ u9 Z# j% W7 C1 @没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    - K. r' v, s! ]* Y" O5 [+ C  Y: C9 h-------) w0 j" O5 e, |9 k# L  `* @5 _+ A
    不好意思, ...
    9 ]3 u: v) T+ d! a3 b
    谢谢,算法应该没问题,就是最简单的线性回归。; R; ^8 A4 i* l* }) r+ W
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    % s0 J" L: a6 @3 W- e
    雷达 发表于 2023-2-14 21:52
    . h$ \: ^2 K- |! Y1 v) _1 n$ E谢谢,算法应该没问题,就是最简单的线性回归。" e0 i5 e# w, K3 J
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    , c4 l/ Y. y" C5 G! M# ?$ n

    ) k+ F1 u$ K% q  R' Y! M# ?$ D刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    / `  @* P) Y, K, V
    8 B0 x# ]4 ~5 ?! ^2 b4 U0 V  C或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 " ^- F2 i8 z# S/ e; p* G0 ^
    老福 发表于 2023-2-14 22:00
    6 W! s9 z. u9 n8 M2 o4 q刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。$ [7 z! n" F; ]" G
    * L/ C, A0 V4 E/ {
    或者把b但的起点改为1试试。 ...
    5 s) f+ ^" D/ e1 m3 K

    , G! K- E7 X+ {7 X你是对的。8 z8 O) V' J. U2 o& ~6 V
    去掉了随机部分/ K1 T7 y- G8 u) D* C& Z5 W
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)* s8 I6 F& U; d0 ?
    y = (x*27+15).reshape(-1)
    : C$ C$ F8 X8 i# j9 M, w& @+ I0 F3 q% F
    循环次数加成10倍,就看到 b 收敛了
    2 C3 V! f& w( G3 |) D& l0 q( cw , b
    2 _) S* O- P$ k27.002620697021484 14.826167106628418. T# K% T* c1 F; P3 B/ {

    0 m) D( T7 M* }' G$ ?和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-10-23 01:55 , Processed in 0.029732 second(s), 17 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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