设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 $ Z& _, l; Q- I% a

    ( q- _% I, }8 n5 n: x3 {; W为预防老年痴呆,时不时学点新东东玩一玩。3 ~& H& I  T$ [
    Pytorch 下面的代码做最简单的一元线性回归:' D/ {9 Z8 C3 G" ]8 |. x: ^
    ----------------------------------------------9 \( o" y! O9 I# W% l
    import torch/ z) l5 A7 _. ?$ d7 A, G
    import numpy as np* f+ E8 r/ S9 T1 x# ^6 m2 z& b9 z2 W( s
    import matplotlib.pyplot as plt
    ; X( E/ u4 I( S- X: U( Aimport random' Y7 }1 `3 }5 G( Z% y3 D7 \
    4 M. I4 {2 U3 O
    x = torch.tensor(np.arange(1,100,1))
    ; m. u* [7 |  \, M% V- ^y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=156 z1 P( ]7 X, B2 i( e9 O
      Q: B3 P7 z0 c3 H) Y
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    - k' K: O7 j0 h3 J. s) b0 mb = torch.tensor(0.,requires_grad=True)( q' V; _9 G: ]( g6 {

    8 ^( o6 G$ E/ c$ M8 M2 j) _0 nepochs = 100& R. C/ q+ P+ K
    . d" r. O: [! Q% G) x5 l
    losses = []+ C: Q% K6 q( s  j0 @% R
    for i in range(epochs):
    6 l- W0 r* L2 c  y_pred = (x*w+b)    # 预测2 L0 H/ f6 ^; V
      y_pred.reshape(-1)9 g$ R' |3 Q" q6 M/ u
    # D8 b7 s( v* \9 q0 ~$ s
      loss = torch.square(y_pred - y).mean()   #计算 loss, t' a" E" L/ x$ u6 J9 S( n, x4 K
      losses.append(loss)9 f  H8 r* B# r$ \( Y; X
      
    0 A" J- L5 g4 H1 u+ ~  loss.backward() # autograd
    / m( z# P0 X" c" S6 x  with torch.no_grad():
    & A+ a7 }7 N  P+ T# u    w  -= w.grad*0.0001   # 回归 w" p# D8 w4 I% b8 n3 [/ z+ G
        b  -= b.grad*0.0001    # 回归 b / g  h& u$ t7 I, s/ ^/ Y7 Y
      w.grad.zero_()  8 Y  @0 H# _6 U2 W
      b.grad.zero_()" u8 l* X( o3 t
    ( U( l1 D0 V: U- l( \7 c9 G
    print(w.item(),b.item()) #结果) [2 d  m; D4 ~% V2 @, \8 o
    9 v9 n1 `8 i2 b) K, B# |3 _
    Output: 27.26387596130371  0.49745178222656254 a, y2 T0 @7 p( e
    ----------------------------------------------! ?  s+ l' V4 n- L. q4 A- H& x0 Z7 V; `6 }
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    - W: {0 g5 x, l# Z6 M1 g高手们帮看看是神马原因?8 G6 w% j" D4 p0 n/ A+ h

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 : q- |7 c: I0 d* e9 j1 ?/ I; A+ o
    8 R% a$ m. g( b* l2 d9 O
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    - {+ f+ B- B& t0 J-------
    % ]' q( A! D( U: v( s不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。; p. E0 l: t1 S6 Q! W0 |5 d8 w* }
    -------
    8 T$ K1 ]) Y/ I4 a! A' O& ~算法诊断部分,建议把循环次数改为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:236 N9 W# U% f+ V4 D! G: m! D
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    + X: ?5 c8 E1 e' ~3 b-------
    6 e) o/ Y6 r+ A; d/ Z不好意思, ...

    % J& L% _) k, F) j谢谢,算法应该没问题,就是最简单的线性回归。
    7 _5 l- j* ]8 ?2 n我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 & E; @1 x, b) m' L, u
    雷达 发表于 2023-2-14 21:524 K& w' J3 |3 P% g/ M5 m
    谢谢,算法应该没问题,就是最简单的线性回归。
    " u6 ~$ r/ j  S+ s# n" h6 [" P我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    , D1 ~- p. t1 e& D( C2 ^# ~; k) C$ p6 a: b9 i3 C3 I5 F
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    5 A+ S$ J4 `% R3 y# q; t: u' F: m5 k' b* q& U  K
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    , d$ q8 O( a! W
    老福 发表于 2023-2-14 22:00
    # E3 t2 w: Q% S. s刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      v& h8 |- C1 F7 F, C+ H, V8 N' E' R# n/ o& R
    或者把b但的起点改为1试试。 ...

    + }6 {! g$ Y# K" M- y( D4 {6 q: Z4 Y1 d  r5 Q( Y1 K% A4 v
    你是对的。9 t* r# S9 Z) v2 I
    去掉了随机部分
    / V' G8 o5 t4 V7 N' n7 R' a#y = (x*27+15+random.randint(-2,3)).reshape(-1). a  b' N7 }" R: l
    y = (x*27+15).reshape(-1). V4 T( v# W5 c

    , c0 Z! j  g) e1 d- L% X% i' N循环次数加成10倍,就看到 b 收敛了
    7 U8 i* ]0 i$ l+ F) T1 Dw , b( A  P% k& [" a
    27.002620697021484 14.826167106628418  X% t& s9 R2 S1 W7 J; I' ?

    % O4 [% K  f3 j+ o+ H6 i) J和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-13 11:04 , Processed in 0.056339 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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