设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 . a& u( s/ t9 a: y9 x8 a- c
    ! W, I  @: }4 u
    为预防老年痴呆,时不时学点新东东玩一玩。5 A. n( _2 I, Y1 Y0 E! p
    Pytorch 下面的代码做最简单的一元线性回归:
    & ~  A# h' k; Y0 w4 U. C6 X' j----------------------------------------------
    1 J) T) j# r& k2 D5 a. l7 n" Timport torch( ^' z! T  V' y
    import numpy as np
    6 F7 I7 p7 s" g5 f' q* R, p! ?/ Wimport matplotlib.pyplot as plt. O1 ?. d- t' p
    import random
    + O4 D6 I5 N/ N% B  Q3 Z9 e8 t% U, I* b( B6 ^
    x = torch.tensor(np.arange(1,100,1)): O; l6 \# z6 c2 H
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    6 h( z7 W3 B4 K
    & v* M1 ~* v+ p( D# H, t" Iw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b# m' b% M+ K/ u; A5 r( s
    b = torch.tensor(0.,requires_grad=True)$ A/ S( A+ G5 \" i6 ^% ]5 M

    3 d$ d  N# }/ N1 d, sepochs = 100: J/ ]& ]$ ]% L$ m

    * [4 q. ?& h2 \: glosses = []
    8 P; {. O) l" x0 {6 q; dfor i in range(epochs):
    ; G9 \) Z  i0 x4 G4 C  y_pred = (x*w+b)    # 预测( s/ Y- f. t! I0 R5 A9 }* O# d
      y_pred.reshape(-1)
    # \( j! ~% m- L! _5 a7 v2 j9 Z% b * y2 d$ T, w4 d2 t
      loss = torch.square(y_pred - y).mean()   #计算 loss" r% K4 l" s' \! x/ v
      losses.append(loss)" t/ s3 _' k4 s3 _2 R
      
    5 k" R) i! f! L( s' }; Y' \  loss.backward() # autograd
    ; c) K  ?, z( E) Y/ ^) g  with torch.no_grad():; ~9 l, a. i$ b$ Q5 J: C
        w  -= w.grad*0.0001   # 回归 w
    . I7 t, P. ]! I+ q+ i    b  -= b.grad*0.0001    # 回归 b - t& f" t7 t5 x# a' _
      w.grad.zero_()  " Q; j/ a" B, k7 @7 k7 `' \
      b.grad.zero_()8 ^# d$ S) [: ^* b5 j

    / U! v' U- L7 ?print(w.item(),b.item()) #结果
    4 f5 B! X7 w# x: a7 O1 f, P
    1 p0 I: g3 @  P+ H2 H& KOutput: 27.26387596130371  0.49745178222656255 x& ~7 e, E- N+ u, u/ b0 N
    ----------------------------------------------
    % N9 b9 o% }3 i& _最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    $ p4 u9 @1 q+ p2 c& K; K高手们帮看看是神马原因?' x- @- I2 S9 k8 K

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 % u/ Q7 z9 t! u2 \( m8 ~& z
    ' q- D, X  A+ t
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?; V2 t5 G0 [( Y. r2 O# Q% b, F
    -------  E: V; R3 i/ {8 z/ W  D# ]( z
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。+ f+ w3 q3 w: E) T2 [, F0 [0 p4 N) {
    -------+ r: D9 {) ~( G$ L; K
    算法诊断部分,建议把循环次数改为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
    1 S$ I& S* ]% I没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' v  S5 p& X1 g: B9 z+ T3 `$ T-------6 e8 C' M: X0 }$ ]3 X/ b, ?
    不好意思, ...

    5 u( \- h1 y9 @* Z$ v谢谢,算法应该没问题,就是最简单的线性回归。
    # U1 e$ i" u; ]; q7 f2 I我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    0 k! Y. u/ k6 m& A( v# V
    雷达 发表于 2023-2-14 21:52  F- m) c. }0 j: {
    谢谢,算法应该没问题,就是最简单的线性回归。: t. q8 Z0 ]- j' E& ?* l
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    & v- N+ N+ u; J5 [% F: y5 j. Z  H) W$ X  f5 l1 L
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    - F: z4 y& v! @5 K8 I7 h  e& E
    8 N7 Y. D2 d! b- Z4 t% y& k或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 + `8 J+ _6 p4 ^
    老福 发表于 2023-2-14 22:00  V6 t" @1 t, n+ W+ @! t
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    & v6 G8 q) N( ~, P8 \% R2 ?% |3 @
    & s+ s3 A/ E% c或者把b但的起点改为1试试。 ...
    ; R; r3 h; n& c; i) L) b+ c5 a
    4 n2 R6 w/ b$ C* d$ ^% _
    你是对的。
    9 Z. Y3 }! [! R) l去掉了随机部分
    8 q& J5 A: F7 s! s) I. q4 J#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    3 A3 D, R( {5 L* U2 t! ry = (x*27+15).reshape(-1)
    $ C5 q, R0 ~3 _. w  e+ z8 e! X( |8 I5 q5 u7 W% @
    循环次数加成10倍,就看到 b 收敛了
    * M; E  j  U) v  l: A2 tw , b
    , i( B+ \3 ]) w8 N% ^) K. @27.002620697021484 14.826167106628418
    0 m6 A; z+ P% ]0 j" H% g0 ], Z0 d+ m% Z: x& U/ H9 A. B' W/ [
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-30 17:43 , Processed in 0.054653 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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