设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 1 A. ?5 ^4 _( P9 C9 C4 Q$ d7 O- |

    1 L2 }' H9 v8 X1 R3 L: ]9 G为预防老年痴呆,时不时学点新东东玩一玩。. w/ F2 H0 |. s& I4 J3 t
    Pytorch 下面的代码做最简单的一元线性回归:
    ; {8 d3 d+ r. y2 B) H9 }8 Q6 P----------------------------------------------+ e$ p* Z$ \5 U$ F0 ]" w
    import torch
    ! V+ o) O8 t' W, Q  F+ Simport numpy as np9 N3 p* l9 p, B" S$ ?3 @+ P
    import matplotlib.pyplot as plt- L! `5 r8 b% x; _- Y5 H0 |* t& x
    import random
    4 F  w/ k$ e- W: L# ?  D7 q2 y2 Q( W
    + x8 n+ |, @2 ]; F; l; q% u1 \% rx = torch.tensor(np.arange(1,100,1))
    " `0 n! U7 M0 T4 N5 Y6 E- M) u. Ry = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    8 N) D3 d2 Z& x) D6 \, D. ?1 G  ^, A) L6 s) [
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b" z- j7 `1 B. V- i5 U6 I9 _
    b = torch.tensor(0.,requires_grad=True)4 g; t1 D" V$ T6 z& y$ i

    6 }. [) U) k- w7 i  w9 hepochs = 100
    ! j9 Z  J  D8 _$ C! w( B: }5 X7 p3 s" U% e3 Y
    losses = []2 h0 ?$ i, I( _5 f
    for i in range(epochs):
    % h6 y4 x- [& T$ h  y_pred = (x*w+b)    # 预测
    1 A( N) q' ~8 B8 D2 X* c  y_pred.reshape(-1)8 W3 J# T  y" |+ G) w

    . Y2 D( ]" @/ G* k7 W7 z0 Y* j  loss = torch.square(y_pred - y).mean()   #计算 loss
    5 j6 U" \$ M/ v8 R8 G  N  o# u  losses.append(loss)( V5 C: p9 E6 S  Q  {3 x7 \
      
    ( k1 u/ O7 x' t; Q  loss.backward() # autograd
    % V' O' n+ T/ X  y# M9 u$ i' c  with torch.no_grad():9 x, ~! I5 E8 p  P( K# e2 c
        w  -= w.grad*0.0001   # 回归 w
    / Y5 N9 w2 b) p- n2 `    b  -= b.grad*0.0001    # 回归 b
    4 g2 T% c3 `- L% o3 [  w.grad.zero_()  ( A- J) f, o# y3 v+ k
      b.grad.zero_()
    1 o8 U8 q  H6 z  q& b( u0 D$ H+ G6 m' E/ \, x1 s
    print(w.item(),b.item()) #结果& M  t9 l+ r( Z* W# J

    - a$ R  e& G" gOutput: 27.26387596130371  0.4974517822265625
    9 S# P- M1 W: B. d3 V+ \----------------------------------------------+ k$ O5 L; i$ }( d. R
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    7 K+ v6 Y( D' c* e( ]$ G6 Z3 M" a) l高手们帮看看是神马原因?
    & Z7 t0 S& O' h8 I+ z' ^7 d

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 3 J: X' i, l* ^6 p# X

    2 v- [* w+ T% d* r& O7 H没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?. g' R" Z, s1 m' `; @. d1 l  l8 }
    -------
    9 N4 o2 ^8 w9 I; }8 ?* M不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    2 h& \' J, L' r8 N4 }4 H-------
    - p3 H0 \' q! h! A/ `2 k算法诊断部分,建议把循环次数改为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:237 q( ^  A" T7 D. p" s& m; }. `
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?5 K# q8 x& A  P: W# y; q
    -------
    6 s( W! c* O. I- ]7 U1 b不好意思, ...

    3 C, ^; v( Z- L( D+ n4 d2 j谢谢,算法应该没问题,就是最简单的线性回归。
    7 y5 Q% }; b# G& k0 I( h我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 ! |& L! u# ]9 N3 k( r
    雷达 发表于 2023-2-14 21:52; ~1 |* p2 ]- ]; }( ]
    谢谢,算法应该没问题,就是最简单的线性回归。- g+ Z5 G/ F* i& T5 k! `
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    0 s  |1 G/ y) R+ K5 X
    4 z1 A2 v! _/ e& [7 j/ y! x刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ) V- f; a5 W' z% k) Q
    : {$ a" A5 G8 {$ r或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 & j4 j8 o7 m8 m  p
    老福 发表于 2023-2-14 22:00
    5 L9 p1 f2 L7 r8 e2 y$ X刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。8 ]! U5 |1 i0 }1 @6 q, r7 Y

    5 J$ u: _% K$ |& b( E" b) x或者把b但的起点改为1试试。 ...

    . z  ]& d& p1 c* |' T8 [9 J$ c
    : I# J% @4 ?$ r4 a$ f4 d+ o你是对的。
    & [& n, e' l% k4 q0 ?去掉了随机部分& g  Q; j) m2 }  |% E7 v# z
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    + \; Y$ T( M% z  zy = (x*27+15).reshape(-1)
    ) ~& X4 i7 S; L( K6 K  |2 j$ s$ d# t0 q
    循环次数加成10倍,就看到 b 收敛了
    ) E9 ?% C- ?& k: x: Lw , b( P8 |, V- y- t$ T3 _- j
    27.002620697021484 14.826167106628418/ R5 \" t2 @; ?: [, E; O/ E

    ( c3 W0 a/ E0 R5 s9 P0 A和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-21 17:23 , Processed in 0.058750 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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