设为首页收藏本站

爱吱声

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 1 k7 c9 \/ I; A8 J  y
    , S8 l$ _7 L( [+ S
    为预防老年痴呆,时不时学点新东东玩一玩。
    2 I- w6 G% Q) ]! @4 f3 q! gPytorch 下面的代码做最简单的一元线性回归:
    " }8 `) l. |* P) n/ Y----------------------------------------------5 Y+ w/ A6 D+ g8 k8 Z4 H9 m4 r; [
    import torch+ G$ z: b' e( @& N/ Y5 M' Y
    import numpy as np* F+ {7 J" U/ d8 r7 h! k$ d5 z1 H
    import matplotlib.pyplot as plt
    ! A+ @: O2 ]4 I2 Cimport random
    / E) K. p4 c3 G# g4 q. W4 K
      ~/ a$ W4 A0 [3 B, dx = torch.tensor(np.arange(1,100,1))6 O0 v4 ?; ^6 h4 |/ Q" \# A2 Z
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=156 n3 s0 J7 V: w+ y+ N( v5 [
    ! F7 C  f+ g; s7 C. V
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    . B* j8 s% y: f* s' v1 a& K3 I4 c  Xb = torch.tensor(0.,requires_grad=True); L7 w- k! O" ^2 e; ^3 x9 C' l
    # ?. o4 D8 p0 F* M! K" S
    epochs = 100+ ^) F( q& i0 i6 [

    ' t- ], W/ g! e/ L1 R% S; Vlosses = []
    4 k# Z, ]$ Y3 bfor i in range(epochs):9 d3 j# q' \' V9 C& y8 i5 r
      y_pred = (x*w+b)    # 预测/ G1 q5 v3 D& i) C* j4 O
      y_pred.reshape(-1)
    " O  R* m' e, v6 K( o4 U
    0 `9 X- u. V, ?( O  loss = torch.square(y_pred - y).mean()   #计算 loss9 X* w( H5 q/ G5 z) V' ~$ H) ?
      losses.append(loss)3 U9 p& R5 @. u$ P3 c4 i
      ; O; [+ c: U2 v7 }
      loss.backward() # autograd1 T, }9 I3 h! n' @& L
      with torch.no_grad():2 s$ T. K! Z( F: t! j
        w  -= w.grad*0.0001   # 回归 w) l/ o' _0 `; `. Y
        b  -= b.grad*0.0001    # 回归 b
    0 t! Y: L: n& |+ e5 d) B' u  w.grad.zero_()  ; e4 |/ L+ R! N: T1 a+ c
      b.grad.zero_()
    + c& N; F, z3 l6 n8 ~4 L- H5 p" T% \
    print(w.item(),b.item()) #结果
    / N- |; @" W# ]2 T( p' A6 U1 P* c+ b8 s+ g4 Q
    Output: 27.26387596130371  0.49745178222656251 a3 N+ D8 f+ f. O! J
    ----------------------------------------------( b. `$ j+ M5 S( ~* ~) d7 @) }
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。/ i. u( k# R8 L/ g; L' c
    高手们帮看看是神马原因?- V# P' [: W- L5 N' v5 {# K

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    % v( V4 }  m- U3 N% u' h! C' g: X) v; n& j3 E. \* c6 s8 X
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    # }9 ?% W$ |8 p" U2 m-------- A8 a# ?. [$ E6 ^
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。6 D- n! v$ r% D8 L. _+ ?, u& V8 q7 y
    -------
    7 M5 J3 o9 {7 |3 R9 d/ G5 O算法诊断部分,建议把循环次数改为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' W* Q' q. y/ D5 J- s
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' z5 T; t) N5 Y  B1 `8 \-------( ]3 o3 z9 C1 n( e
    不好意思, ...
    1 E7 S$ \* j7 b& a1 l. t4 D
    谢谢,算法应该没问题,就是最简单的线性回归。2 k5 L7 @, U; Y- \0 {& c" W7 ], t
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 0 r* f. Y0 B6 t
    雷达 发表于 2023-2-14 21:52
    * X: p, [7 k5 M谢谢,算法应该没问题,就是最简单的线性回归。1 G$ w# i# e) ?* ~
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    9 b; P# C. T& I

    / n5 K" B7 Q+ {# _, @) }刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ) j3 A" n; n4 a  k$ b" c. G
    ! P% c2 s. `' c2 N或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 : V) P8 B% \/ z- @4 y
    老福 发表于 2023-2-14 22:00
    4 }$ ]; N- ^+ p& B+ c, |刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    8 I+ {5 q5 F7 o% E1 B( D3 @. J) q  E
    或者把b但的起点改为1试试。 ...
    % ^! ?3 _; Y" Q5 U( w7 G

    , {! j" Z" O5 W  M3 N" j你是对的。
    & j6 `4 j+ g/ L0 D去掉了随机部分
    " z4 p# |4 k) O( L#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    9 l  e0 X1 M5 ?1 }4 E5 ^1 K" Qy = (x*27+15).reshape(-1). @- |3 f0 B# x: R- X1 m/ K1 u
    9 w& @9 N. D, R& P( l
    循环次数加成10倍,就看到 b 收敛了. Z6 n$ W3 d! S( e7 H# W
    w , b7 \; a9 _) p  P/ q
    27.002620697021484 14.826167106628418
    2 `3 Y1 X) G$ d7 ^' Z: p: c6 Z" v
    2 @0 I) X6 v( f' |! I和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-9-18 21:48 , Processed in 0.033733 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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