设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    1 M4 R& M* L) n* e6 C: U6 S) q
    ) J! e8 I, Q5 G! a为预防老年痴呆,时不时学点新东东玩一玩。
    % J2 o3 [9 Q$ }/ |  n( j$ }4 uPytorch 下面的代码做最简单的一元线性回归:
    & E  i: |8 P- ?7 C8 w----------------------------------------------
    1 v1 C+ k& Y  t) t9 G2 W* {import torch
    ! U7 e! R8 W! }, P6 W1 g) ximport numpy as np& V4 m% c! z7 B, I) i7 a. a& g
    import matplotlib.pyplot as plt) x3 p- X! O# W  y# U# J
    import random" G& @, @, v' y& U8 J
    ' z# Y2 n( j# x: t
    x = torch.tensor(np.arange(1,100,1))
    0 v3 @, W( m8 jy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=158 Z  C' \/ g) W# C# ]7 w

    4 Q7 v2 e  Y; T8 i; |w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b8 a( d( C+ }0 s" s. s
    b = torch.tensor(0.,requires_grad=True)% l& {1 m7 `3 w  e( k+ m0 T

    6 R. d* ]6 N4 N3 r" kepochs = 1002 K) q. V% m6 G

    9 l# j+ X- Y+ H' v% Ylosses = []
    6 f$ Y, v: {9 X0 p8 Bfor i in range(epochs):; n' l& a; x! E! J; ]2 J) B8 ]2 |
      y_pred = (x*w+b)    # 预测% u2 V* T" |, v8 s" e5 ]# T
      y_pred.reshape(-1)' i2 u9 a3 N4 j5 a* ^% L

    * [7 _* u4 V  i6 T- e  loss = torch.square(y_pred - y).mean()   #计算 loss
    7 I) ^3 @, o; Q5 J* B; F6 M: p1 N  D  losses.append(loss)
    0 o( l% V# ]. Z/ F0 r; _' l  ! y0 x7 q. R0 Z* V% H
      loss.backward() # autograd' z6 y% D/ m  C1 L* B- Y0 Z
      with torch.no_grad():
    ! D8 R, P: E* K4 Q7 w+ D8 i    w  -= w.grad*0.0001   # 回归 w6 N; L' L. [( m. y, C% a0 J
        b  -= b.grad*0.0001    # 回归 b ' G9 e9 I6 G% n& G* m  K( l7 b
      w.grad.zero_()  , g- \- w1 \, r( t
      b.grad.zero_(): z, {' b. K9 R9 o: `! b1 {) e
    ) Z/ w& C; p( A% T4 ]2 }  m5 b
    print(w.item(),b.item()) #结果" C2 C, h7 ]# {1 e

    : W% C8 Y( ~5 [3 R0 S2 D6 g" B0 ~Output: 27.26387596130371  0.4974517822265625
    6 A3 |  A6 q& p: w5 b----------------------------------------------5 O# K/ y4 v6 N6 f+ e8 M
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。0 o# T) |4 Z, q3 X7 Y. j
    高手们帮看看是神马原因?
    ; b4 x. z1 z5 J7 t) ^

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ! Y$ i9 O, c- {7 A
    $ a7 A) g3 p* g- N, E
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    . p2 \: c$ u$ U-------: w7 b. ^* s: s
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。- O7 [: E6 h' n) Y6 Z$ L& R
    -------( C: D; m2 v, t& F' Z; @& t. t: N) {; l
    算法诊断部分,建议把循环次数改为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
    ; J0 d- @6 a, [* f3 [7 M: H没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    , C4 g6 m, R; x. O# }2 G-------
    & q, ]/ A9 b3 g1 [1 l; q不好意思, ...

    ! T( O: f, K( a& j8 j" a, z  n谢谢,算法应该没问题,就是最简单的线性回归。# i: |& G) _5 d  e( T
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 9 [! H+ t* t& a) U; i3 Z8 |6 Q
    雷达 发表于 2023-2-14 21:52
    + ^+ L2 u& b% e0 t. L; G2 }谢谢,算法应该没问题,就是最简单的线性回归。
    7 U- k3 N5 ]7 d1 m& ^  |8 A我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    , R6 L  X& n. i. R! r3 G7 ?
    ) P% }3 T) v/ i, |& m- s. P
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, K2 S: {, j4 H6 t- A

    & b/ w. r0 y/ ?& ?: S2 Z5 a或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ; ?% m$ ?- ~! ], J# `. w$ Z# y
    老福 发表于 2023-2-14 22:00/ F! [2 J5 a- g% Z
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。1 a7 ~% D0 w' l: m% n% h- E
    ; n" u# {, s- t# X) H0 W- ]
    或者把b但的起点改为1试试。 ...

    5 p( W: X8 z& P* {% D4 w# G
    6 v+ \4 }! ^7 B0 F; C; T  l0 q7 P你是对的。  |; l- b$ V/ [1 z
    去掉了随机部分
    + ]# R1 m/ e& v. }& W3 G#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    , a+ h( C" N, X9 `8 T5 D' e/ ?* |y = (x*27+15).reshape(-1)
    0 j3 b$ l- A+ J8 L  L7 X4 P0 C5 Z5 i# H/ R
    循环次数加成10倍,就看到 b 收敛了
    & J6 x* h+ h  e  {3 ]w , b* q3 j$ y: O. ^) \
    27.002620697021484 14.826167106628418
    $ z+ [! X5 |9 ]. V8 X
    8 _4 X8 g' M+ _7 y2 g和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-12 07:08 , Processed in 0.065203 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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