设为首页收藏本站

爱吱声

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    * D: J0 E) ~  L7 U. y9 V' i
    $ b; t- O& ]2 i为预防老年痴呆,时不时学点新东东玩一玩。
    6 j8 `# I9 J; `& c  N) o5 s9 `# jPytorch 下面的代码做最简单的一元线性回归:9 @1 {# J, J5 T3 A& M
    ----------------------------------------------
    % o' }7 y+ t# I* P9 L1 O; P6 m. eimport torch( O5 g; d3 B2 H! Z' c
    import numpy as np7 `! O( @! W2 D# P
    import matplotlib.pyplot as plt* K6 }6 p4 v* d  @3 u& E; b# C6 j
    import random5 b- U9 ?  Z, G3 @( e  b
    1 d. G6 [% N- X
    x = torch.tensor(np.arange(1,100,1))
    - _. a& Z% c. M! t  e9 oy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    4 Q( J' S8 Z* G( o' r: w
    $ e4 \2 p7 q4 Z3 X& ~7 k! G$ m$ _$ vw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ! t* i" l$ s+ T) O' ]( Bb = torch.tensor(0.,requires_grad=True)# ]. [9 h4 G2 W- s. B+ Q

    6 c6 }4 B- N9 E) k, ^! e, @+ N6 pepochs = 100
    % \6 B6 n  n5 U! d: _! X! }* k* ]' ^4 H7 |- M
    losses = []4 t4 u0 W2 f" `& i
    for i in range(epochs):
    & H2 Y! v" h+ I% B  y_pred = (x*w+b)    # 预测
    / q9 X8 T! j' ~. x0 ]  y_pred.reshape(-1)
    " G" e% s# D. O4 m2 x# F8 S
    % X! H6 y- j" \4 u  loss = torch.square(y_pred - y).mean()   #计算 loss" y2 j6 b3 H, x" x: H, K
      losses.append(loss)
    9 |5 j' W' }- J  7 p9 x  \/ |5 t' a% X  G; o
      loss.backward() # autograd/ w3 g2 h2 _6 E* J$ Q
      with torch.no_grad():, w9 i6 e  J: h6 d+ Q7 r3 }
        w  -= w.grad*0.0001   # 回归 w
    3 K* O) P1 E, Y3 r    b  -= b.grad*0.0001    # 回归 b ! A- z# Q( k! @
      w.grad.zero_()  & i. O* _* p% {/ u) {. r% l: w/ h% {4 b
      b.grad.zero_()
    ' C6 ^6 [0 {2 r9 V; m( n: N6 N8 ?" S
    print(w.item(),b.item()) #结果
    - `" c# I6 K. Z8 o2 Y2 R& o& x& A% A5 ]0 L& U+ S" X
    Output: 27.26387596130371  0.4974517822265625
    4 h1 o. a  n& f5 Z$ Q----------------------------------------------) M% S0 t- F( Y2 j
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。  H3 z1 p# a8 e+ n0 r9 J
    高手们帮看看是神马原因?
    ; C' R% U4 B" e( H3 `4 F* A5 [3 v

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 # c/ U7 M+ J' G

      c$ W' i' j8 q8 W  V; V没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    " p( `  z- M' K; N-------
    4 N: R+ I& n7 Q7 Q' ^1 I1 Z6 r不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。+ R) j/ z" r8 c( ]
    -------( ?8 C# }9 G6 K2 H# D( |6 e: S
    算法诊断部分,建议把循环次数改为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/ B. t0 U8 i8 N* k
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    4 h! F$ J& j, r# i3 l8 w-------
    + ?  d+ q1 @& l3 j不好意思, ...

    0 T0 L3 m( z: a$ j7 F2 j谢谢,算法应该没问题,就是最简单的线性回归。
    % l/ [, D2 b6 v! f; t2 U我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑   j, n! k7 @/ A; s4 [6 C8 S( }' p' v
    雷达 发表于 2023-2-14 21:527 K9 b3 U. t: h: \7 h
    谢谢,算法应该没问题,就是最简单的线性回归。2 _) o9 H9 u9 T3 V+ g6 H8 G7 N9 }
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    # K  ^1 M! B( V

    " j$ P7 U( W8 x) ^刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。4 k/ n( ?, `  h# \- a
    ) O: Z! B) [! W1 k8 w
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    , `+ @* b6 \+ n9 T. F) R9 P
    老福 发表于 2023-2-14 22:00
    # f9 a3 i, j8 G( K8 l) f刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。) _. A. l/ J6 l4 ]' l8 _9 Y0 n' V

    . r+ B$ v2 }: p或者把b但的起点改为1试试。 ...
    - i# w$ M5 v- v, o& A4 j7 {! \, G
    - l+ O( g8 ]! J
    你是对的。
      m8 m6 i. O' d2 A8 R' G. c去掉了随机部分* i1 g8 g/ [# X+ O- c
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)% V0 \1 L) n# b5 d
    y = (x*27+15).reshape(-1)
    6 x6 `# N# L1 s% Z
    ; b# Z, c5 e$ p循环次数加成10倍,就看到 b 收敛了3 ^; I* R6 ~3 N) n: }
    w , b) _, Z1 C8 P9 \+ W* e
    27.002620697021484 14.826167106628418: Q# F, V" ]8 G/ c

    1 C& A$ p* [  h, g# N$ P  [- i和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-7-3 06:03 , Processed in 0.033990 second(s), 17 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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