设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    9 M$ S( J. s6 ?- B
    5 V9 g: P  @( J  i为预防老年痴呆,时不时学点新东东玩一玩。
    : ^* t& j  l8 V0 i( V0 k# jPytorch 下面的代码做最简单的一元线性回归:
    5 P6 b6 u- P1 ~8 Q----------------------------------------------, f) j; D  f1 Z
    import torch$ y4 w3 y8 X; \2 J% I4 K0 U$ a
    import numpy as np+ a6 Y0 T8 T; L
    import matplotlib.pyplot as plt
    + `( i) L( A9 yimport random; J; Y5 u7 T! E$ F/ l

    4 H( Y$ h* m' I! j7 A/ Nx = torch.tensor(np.arange(1,100,1)), q$ Y' _( E+ H+ [6 M1 }+ y  U$ }
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=158 r% T- @! h6 v: h  r1 T: B
    3 s5 F7 t8 o/ q
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b$ P' Z! A# @0 h/ o6 W
    b = torch.tensor(0.,requires_grad=True)9 r* h4 v* a, `  b' v2 x
    8 v6 N, V# N4 p9 e: ^4 I, x
    epochs = 100
    1 l1 M4 U4 @/ z- _6 t9 y
    % t  r" x& U6 O( x6 O  |losses = []
    ! R0 B$ O8 E- `( S: L6 L* R- Afor i in range(epochs):
    : g: R; j- G" q  ]3 ^0 D  y_pred = (x*w+b)    # 预测
    5 D3 O, h7 c% j% f" [* E; ~* d! s- V  y_pred.reshape(-1)
    8 H% q3 i4 w- Z- j* ]% }* Z- a 2 F! F6 [9 t4 x) _; H3 S
      loss = torch.square(y_pred - y).mean()   #计算 loss4 H( t3 E) G. e$ H  D& i" B
      losses.append(loss)
    , h" o$ ^1 L9 C' x2 w  
      y( }0 F# E$ u0 q3 m  loss.backward() # autograd
    ! \( {8 m$ Z! ?- H* U$ K  with torch.no_grad():# a0 f% S1 [6 L. y" {8 W9 J) E. ~2 T- {
        w  -= w.grad*0.0001   # 回归 w" ~2 O8 }2 A+ _7 C
        b  -= b.grad*0.0001    # 回归 b ; U8 D3 H. {4 W! \1 v& O
      w.grad.zero_()  
    ; ~- {2 v. J) Y% z; @  b.grad.zero_(), x8 a1 b* `8 O- M4 f* d. T5 f
    % H1 w2 J# m8 F1 F: h
    print(w.item(),b.item()) #结果
    3 i- G8 i" K( S: y+ r1 R4 s8 y, q2 C0 P1 M) n
    Output: 27.26387596130371  0.4974517822265625% U9 ~! r9 r9 K3 T( }* @
    ----------------------------------------------" W# C: H+ v: ~( a, d8 C; R0 z  p
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。' r+ D0 v5 B% ~2 w6 H
    高手们帮看看是神马原因?# m- z8 R& w3 M7 v

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    8 t: L+ _2 G. Z2 v( M. g, k  K& z5 x2 H# i# d) ^
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    - R4 c1 ]# B" F' j% `: d-------: w4 \1 ]5 `+ K9 A
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。% r5 `! N' I. H* w8 j% u2 A1 K
    -------
    - r% a. ^. n. a0 j8 Z% p0 F; v算法诊断部分,建议把循环次数改为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:235 J# E8 y; e* T0 m9 X  u
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?$ z8 J! x7 F5 `$ l
    -------
    # T. _" L' W1 e, q( J! y不好意思, ...

    9 r* d! F/ x" @; ?8 o: o4 o谢谢,算法应该没问题,就是最简单的线性回归。
    / ?% c% \; N& B: }+ r4 x我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    # ^" w. c5 r1 w. M" ~$ m6 w4 f2 k
    雷达 发表于 2023-2-14 21:52
    ' W, \! I% [' n& f  Y. x谢谢,算法应该没问题,就是最简单的线性回归。2 E# y4 j0 l* m9 A  \6 ]
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    8 e8 T- P0 A% G: s8 l1 R/ h2 Z+ b5 d; B3 x* P
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    , i( N' w. V, u2 }
    3 J$ Y1 B8 e! j% n( m或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
      w( q/ H9 ?. Q
    老福 发表于 2023-2-14 22:00
    % k3 X% D, g4 j+ y( Y1 Q( ]; A3 d* i刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ; P+ U" w3 q5 ?5 Y; P! J& r, [+ h% _
    或者把b但的起点改为1试试。 ...

    + G! E  ^: X- A9 c
    7 `; {, I2 C' p3 V7 T, k7 i你是对的。( a3 w! n4 |: W  A" g" d) p6 A
    去掉了随机部分
    0 j  [2 F* e+ G3 G: }  ?% n#y = (x*27+15+random.randint(-2,3)).reshape(-1)/ e% u" {% c. i/ H: R" z$ q$ C$ u4 t
    y = (x*27+15).reshape(-1)3 |% {6 Z6 y+ i" h6 z: s

    ! v6 A8 ]& a" n; N+ e: ^% ^2 ^循环次数加成10倍,就看到 b 收敛了
    / ~4 Q5 I) h- p# ^7 r$ Fw , b
    , {- t7 [# F# @, U( y27.002620697021484 14.8261671066284184 i; h; K; n( Q- s

    % ~7 _5 t- P* o/ L# B, h3 T, r" W和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-16 18:25 , Processed in 0.057668 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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