设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 - U5 b6 N: t# V0 q, w% G7 h
    ' Z- M1 `; K, D8 S
    为预防老年痴呆,时不时学点新东东玩一玩。. y- X4 m* \) a
    Pytorch 下面的代码做最简单的一元线性回归:& l( K3 V; u! a! E. G
    ----------------------------------------------9 {6 _, f& E+ }* _3 x
    import torch
    ) {6 i% h- U1 T9 N+ Mimport numpy as np
    4 m& k* c$ P, @5 R* q. Nimport matplotlib.pyplot as plt1 @, T0 T7 a! N7 l2 \" {
    import random
    ! w$ S; w* @5 K" l) }2 B- O4 R
    . F2 u# |) h: i" O  zx = torch.tensor(np.arange(1,100,1))
    8 S5 d) J2 Q& U& w0 _y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=159 Z$ t4 Q$ ~7 h4 M% j% v4 N6 f5 i; _

    4 x9 c6 T' u) D% uw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b% f* V0 g, v! i3 f- {; h# K
    b = torch.tensor(0.,requires_grad=True); c' O8 x! ^2 c8 @. L
    - W! a1 j- R- U" J+ p/ Z
    epochs = 100) ^* ^1 }- _( C' l
    % K; U/ _5 }1 o7 D
    losses = []; G( l6 B2 |0 ^/ Q  E9 d: W+ X# p
    for i in range(epochs):$ n1 x/ p" `0 W- L" c; ?) h
      y_pred = (x*w+b)    # 预测
    ! j% B9 a3 ]4 O" N  y_pred.reshape(-1)! @& v& x) g7 T9 C

    ; `" _0 I5 q2 C/ t2 C/ z1 c& k, N  loss = torch.square(y_pred - y).mean()   #计算 loss, O3 f  w& K9 H8 k; S
      losses.append(loss)- A0 a# Q! [/ m, i; r
      
    / T* }/ H7 g0 @9 c- }1 s) U/ l  loss.backward() # autograd
    , h  l$ i' l) w- }4 Q, x  with torch.no_grad():
    : Z4 d& f/ r4 ~  E& D    w  -= w.grad*0.0001   # 回归 w
    / {' {$ X0 T$ `% u3 K    b  -= b.grad*0.0001    # 回归 b
    ! I+ h+ N' t. o8 d! `  Q* R/ r  w.grad.zero_()  1 a" p1 o1 ]* I* [; S
      b.grad.zero_()
    " j2 f. O& ~0 P6 }9 N4 l$ a: l8 R" B3 Q' Y! Y
    print(w.item(),b.item()) #结果) b. N- C; l+ C$ A5 K

    % X2 N6 l' ?' a) \Output: 27.26387596130371  0.4974517822265625
    # N- n5 D  H5 s2 |+ P----------------------------------------------
    ( Y. g: l- g! s" F* |, j最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。* f9 G  }4 J, ]+ ^$ Q: f
    高手们帮看看是神马原因?
    ; B& V( U9 t* h6 G7 f

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    2 l: v4 `$ Y3 e# e: @. Q% w3 s
    9 i! ~' z! v* {+ \7 ~+ P1 E没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?% G4 o4 Q! k8 N) V; w' ]  O
    -------
    - u3 j2 q( J: D, S2 ?) |" m# u不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    : P6 w7 e! B& z8 P-------
    % y9 r* r0 V4 I( {/ R4 j9 ~+ q- w. X3 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) k: c; |% J( u  }3 s
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?% d2 `; A1 ~9 v1 S/ b
    -------
    : ?, }: b9 M' c' s0 U. G; P不好意思, ...
    3 D/ h% D) n' D: @+ {0 ^
    谢谢,算法应该没问题,就是最简单的线性回归。; ^6 B6 t) q$ o5 G0 \8 N
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 / E) G1 X. B% `  p! e0 x( s$ j
    雷达 发表于 2023-2-14 21:52% B9 l. a  E( t3 O2 x
    谢谢,算法应该没问题,就是最简单的线性回归。
    ' Y8 o, Q6 i* r我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    7 ~7 @) L  N9 G  q+ u" e2 ^
    $ o  @  d' H1 M3 `( [' F* N7 H
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。- y; ?4 U0 i% j& V3 A

    / N- F: z9 G/ J或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    " i; R3 {' q- @/ R* @9 K2 s3 y
    老福 发表于 2023-2-14 22:001 T: J4 F8 K9 {5 c# ?. `
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    4 Z9 f4 {' I; J: X- A; i
    . H. Y2 a7 n; y或者把b但的起点改为1试试。 ...

    . _7 {+ y3 l; U9 q% Y$ l% y+ W" }& z  m) P4 v. e9 L
    你是对的。  D, {3 I) z% v# H. N5 W+ @
    去掉了随机部分( R+ W, T# E! f$ K1 r5 v
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)8 n5 u4 d3 c  g, q' E
    y = (x*27+15).reshape(-1)/ |9 K. [; {" F

    ( y! J. m5 e9 T循环次数加成10倍,就看到 b 收敛了. z/ z8 i# c2 _) C# {& T
    w , b
    % V# M9 l0 k1 T4 O) H27.002620697021484 14.826167106628418
    ) [0 K) d$ u! v, y# ]' Q7 O/ X3 X6 p  p
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-10-16 08:09 , Processed in 0.033419 second(s), 17 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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