设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 : w5 r+ f4 t5 U$ ]3 m0 F
    2 K# w' h, X0 h% f# n( M, U+ Z
    为预防老年痴呆,时不时学点新东东玩一玩。+ q3 B" S* |1 J' p6 V/ L& g
    Pytorch 下面的代码做最简单的一元线性回归:
    . l3 l1 N: q  w* H+ N4 G----------------------------------------------& s/ q1 n2 m8 ?) B, q
    import torch; H$ N% X; ~; M) Z
    import numpy as np
    2 _* S% }7 Y  D  R+ q) ]$ I$ A6 yimport matplotlib.pyplot as plt
    + r+ Y. ~+ a- r! Eimport random
    6 r, @/ x' s; p" F
    8 {, H& d" z+ G4 r  d" m5 hx = torch.tensor(np.arange(1,100,1))+ F0 p; J- O7 j* t9 @( M: J
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    % R4 x  b( N% A% x% A# N
    # Y3 _  t& ]  ^% @w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b. G( n$ D2 k, }9 \# v1 Z' u3 J, Y% P
    b = torch.tensor(0.,requires_grad=True)
    ; p$ r6 A: ~* M
    & p, j/ R/ U9 n' Q+ h6 S" \epochs = 100
    4 Q" Z* ]' H4 I  b6 V* @
    # @& }/ N% |* h$ d% flosses = []& L  T( y& x) H" `. d# j3 [; X
    for i in range(epochs):6 y' [+ b) |7 k* l6 e$ w
      y_pred = (x*w+b)    # 预测
    & r, |3 x. b+ n) s  y_pred.reshape(-1)
    + P6 D3 y4 g' \. I. x# z
    4 O/ a; i6 S' B( N# r7 q) m  loss = torch.square(y_pred - y).mean()   #计算 loss$ G' o( D  h( k9 A
      losses.append(loss)% m( G0 m* X. M
      # y$ T6 n9 f1 S( ~' W) p: v9 s
      loss.backward() # autograd) R; [- I2 J1 T4 _# g! F
      with torch.no_grad():" i& V/ Q1 W# }6 ^  s+ s, g
        w  -= w.grad*0.0001   # 回归 w* A8 S8 P' g/ w2 K  }
        b  -= b.grad*0.0001    # 回归 b - |: I! i  P/ z( O. X
      w.grad.zero_()  , x5 {/ ^5 t3 u  q
      b.grad.zero_()
    # G7 C( u9 F) B) N' D7 Z+ D" y' B. l4 [8 ^
    print(w.item(),b.item()) #结果5 n+ Q8 ]6 L; P" G- e

    % h: \& b4 {; `/ s' ~Output: 27.26387596130371  0.4974517822265625
    : P& A! }* N7 P% o3 }0 g: @$ W1 u----------------------------------------------
    3 `2 ^7 O  z3 j; k' m  U最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    : W8 k+ L, x9 S3 X! l0 z; w) a高手们帮看看是神马原因?; s- Y& k) u+ d8 w, q) M8 D2 f

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 8 p( W6 N# k1 @9 i
      [1 ?+ g9 E  f% I. ?
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
      _5 ^1 O1 [" }' u1 n8 [' o& K-------- ~% V; [0 B% k2 P
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ' ]5 U" B# K' ]-------% \# H$ ]8 S. r% Y5 N( c" P
    算法诊断部分,建议把循环次数改为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
    3 t2 O7 O5 a) T# a# B" \没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    : |6 u- g; C$ ~-------
    & B$ n* Y7 V6 Q2 d不好意思, ...
    $ |/ v; U1 ]5 }
    谢谢,算法应该没问题,就是最简单的线性回归。
    * y8 H% J/ ?$ D( C+ Y我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 - t% _! k" z5 O! A2 e/ U
    雷达 发表于 2023-2-14 21:52
    : ]$ @$ j/ M5 Q! j谢谢,算法应该没问题,就是最简单的线性回归。
    4 p: C2 U* r8 u0 q5 m( w9 V# \" H我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    & {/ a2 l/ G/ X  O0 H& S+ V

    % D$ a( B  w* h6 O: F0 A+ U8 N( P刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。0 v  o' B6 C) g+ O" W9 b$ S; V

    4 }" y/ @% y; [/ j' F或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ( A$ `: ]7 O- m; R& O
    老福 发表于 2023-2-14 22:00
    1 F; Y) q  A7 ~1 N刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ! d8 |4 Q0 k* u/ J* w. e
    - a0 X2 z8 [5 O% w; Z或者把b但的起点改为1试试。 ...
    + S) \* {6 P* Q9 H5 n4 d

    9 k9 y  i, [. a4 q你是对的。
    . v  a9 N! p  I8 j: q2 k去掉了随机部分9 c* f( J' H0 [8 i$ g
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
      Q/ |9 ]4 }* ?! r5 |  z7 g* A' gy = (x*27+15).reshape(-1)  v* o" ]5 y$ N4 W

    6 n2 d0 c3 Q" u+ o) G循环次数加成10倍,就看到 b 收敛了: P6 Q" e) \6 J1 e- ]% T. P8 K
    w , b- [  }: I: M' R8 ?8 j% n: @& N
    27.002620697021484 14.826167106628418; I% z2 L0 @% |' [8 L0 y
    ) A: X) X2 O1 m& b' B/ Y# y
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-10 04:35 , Processed in 0.065391 second(s), 25 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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