设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    4 g& T; l$ u0 P7 y6 V  ^5 `9 S4 K8 J+ ]5 }  z: p
    为预防老年痴呆,时不时学点新东东玩一玩。
      U8 n( W- d& ^) L3 p) }! @Pytorch 下面的代码做最简单的一元线性回归:+ o6 C' |2 l2 ]; e2 ]
    ----------------------------------------------) J( b4 A1 E" p, \; `7 w
    import torch/ w0 \; P$ l8 z+ c' I
    import numpy as np
    ) P$ o8 {$ o* ~% o$ Eimport matplotlib.pyplot as plt
    - X, c0 E( }% i. h8 @' H" P8 Yimport random
    ; ^$ M8 [2 I$ i/ t( T
    ! r. A7 m3 j8 U/ W( l1 ex = torch.tensor(np.arange(1,100,1))$ [2 ], ]# i' I
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15$ B$ ~0 ]) s4 p5 ~' M  z

    7 E5 n$ @1 r: E5 R8 i. d, z0 Gw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b. Z# G4 [* [; o# R& E
    b = torch.tensor(0.,requires_grad=True); g9 c4 I$ H; P( U  ~8 V, B

    1 p& q9 B- v; N: iepochs = 100
    ' Z, @6 t$ ~( C8 R
    ( B5 u& Y$ |9 ?/ F5 wlosses = []
    7 m7 o; N6 H2 Y/ J' u7 Y5 Gfor i in range(epochs):1 @, D8 l+ h$ A$ C0 T" M7 l
      y_pred = (x*w+b)    # 预测* G& S5 w% x9 I; m
      y_pred.reshape(-1)5 g' l2 A( S* T$ O1 r% _$ h9 ^

    0 {0 o" S: H2 l! r( C1 l: Q* h$ H  loss = torch.square(y_pred - y).mean()   #计算 loss
    8 f4 J6 ?4 p6 k2 @; {2 A% Y' t  losses.append(loss)
    3 ]: B4 W7 R% k! s8 B. r- f; ?    J2 m* q3 i; Q$ E) [! r# @5 ]
      loss.backward() # autograd
    * c+ u& T: n3 v, S  with torch.no_grad():
    ' M7 {3 u+ k; Q1 @( Q3 d9 y5 y    w  -= w.grad*0.0001   # 回归 w
    # |) ]0 `6 h+ n- m- d& G2 i/ U6 {    b  -= b.grad*0.0001    # 回归 b $ ?$ n/ x  ^# R) a6 b. o' ?. W
      w.grad.zero_()  2 p2 r* A5 I4 h2 K4 k
      b.grad.zero_()
    . \2 S) O3 i- m* F) s6 ?( J4 o+ t" F& I$ ~$ A  j: a: {
    print(w.item(),b.item()) #结果! a# M# m: V; A
    ! \% Y' i7 h3 w0 n. T
    Output: 27.26387596130371  0.4974517822265625
    % r7 A. `8 o4 V+ J) ]% U----------------------------------------------
    , S: g' c; z8 O' ]5 U; M* W最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。* |+ ^" X; Q& b. N' z7 D3 p1 ^/ X; ]
    高手们帮看看是神马原因?
    . [& T6 z6 l: g

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    3 t$ L8 X' ]; w! j
    ( @5 A: K! O8 Q' [) \% {没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    , G) K4 Y  |0 r9 u$ X) j-------
    % y0 H+ n  Q- ^5 A  x6 w不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。' z1 X8 i) f) e( R# j
    -------
    , p; h# J! O& z) Y- i' P$ B% V/ c算法诊断部分,建议把循环次数改为1000, 再看看loss是不是收敛。有点怀疑你循环次数不够,因为你起点是0, 步长很小。只是直观建议。

    评分

    参与人数 1爱元 +10 收起 理由
    雷达 + 10 谢谢建议

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    板凳
     楼主| 发表于 2023-2-14 21:52:57 | 只看该作者
    老福 发表于 2023-2-14 19:23
    % u$ z, f( |" i; ^没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?7 Q% n% p$ S1 |+ r) P2 f6 T
    -------
    6 B* {6 L. U. j( i+ O不好意思, ...
    ) e0 L0 T) I1 j
    谢谢,算法应该没问题,就是最简单的线性回归。& _- o2 L# n( k2 J4 p4 c
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 $ [; ~6 O$ q$ t8 \* t, |9 c4 Q$ Y
    雷达 发表于 2023-2-14 21:523 P1 S  J. H* J+ d
    谢谢,算法应该没问题,就是最简单的线性回归。2 C/ D7 W! O8 W, G4 @# ]# v
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    ) Y) G, f( I! }$ H  ?+ l
    7 {6 t8 S( h6 B# a9 @刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    & K2 O. `8 c+ l+ O3 s9 d# j5 n, l& C
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    , [! T' m" t8 A( Q
    老福 发表于 2023-2-14 22:00
    9 S( y$ d, f! }6 U# N! W- l刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。3 b6 p) ~/ \# {: F4 G  r: h% V, j& m
    8 L3 R: M" _$ O0 v' d
    或者把b但的起点改为1试试。 ...

    ' t$ W) d5 O7 t) Z, u
    ; C  z& G, i- l' R! S( p你是对的。1 }1 V# Q+ I/ |7 }* s/ Z2 F
    去掉了随机部分( N: o! B: w, x* D' c
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)$ B5 P# Y; M  Q6 g9 Q
    y = (x*27+15).reshape(-1): X1 c1 {* B3 s9 p" U! H3 k

    9 u  e* j, E. i$ g$ J+ B$ q循环次数加成10倍,就看到 b 收敛了/ C- j; N* m6 t! L* |. \' G
    w , b2 p& t) I* c- [0 d
    27.002620697021484 14.826167106628418
    6 H; c8 R3 D6 O- g! \
    2 V5 L$ R8 K, }7 n+ n0 R' y和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-7-4 02:36 , Processed in 0.035973 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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