设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 4 y$ R$ ~5 A: f2 j, g9 q

    - E) t5 [: q2 a( Z0 Z1 A3 h9 Z为预防老年痴呆,时不时学点新东东玩一玩。: B5 C* {! I2 e
    Pytorch 下面的代码做最简单的一元线性回归:
    ' K: Q9 b8 ]2 U0 S----------------------------------------------
    1 d# |: H+ K! |0 |8 X4 Z6 Pimport torch
    9 G  G! N0 T1 M: T& S& rimport numpy as np0 V$ I, ?1 @! d  w
    import matplotlib.pyplot as plt
    4 t7 z. u( v$ L5 K) uimport random; R% m9 A5 `! b9 D" v  `/ H

      Z. ^% @* M) o5 Fx = torch.tensor(np.arange(1,100,1))
    ) H- q- Y# u- I, S! My = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15) g( k5 }# h- |  `9 u
    ! p3 ~. a5 j1 u
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ) Z1 g1 ^$ A, S5 Sb = torch.tensor(0.,requires_grad=True)
      ?7 }, x6 ]! N* W; t( t
    ' s- R# D1 |6 |epochs = 100
    7 }; z$ q0 ~  o
    : M- d: h# ^9 @' o3 M" Hlosses = []* k# c6 m& L, O
    for i in range(epochs):! T" V: E& a& D8 f" a
      y_pred = (x*w+b)    # 预测/ a7 I, l( a, C; Q& i
      y_pred.reshape(-1)
    5 L8 B4 v+ e+ y; v( {8 P, G " l  l/ Z/ o& y% U+ c" `  i) Y5 [
      loss = torch.square(y_pred - y).mean()   #计算 loss; j& ]# o8 U& K4 Y* e; U: [( E- o
      losses.append(loss)
    3 x" O: y( M' \$ M  / }" I4 E4 ~8 A! s4 X. F
      loss.backward() # autograd
    0 ~3 r1 }6 R9 C# z3 F6 e( Z  with torch.no_grad():- M6 v, R4 T4 e
        w  -= w.grad*0.0001   # 回归 w
    , q) C* ]: p' s. ?# S  T    b  -= b.grad*0.0001    # 回归 b
    / M( _( y9 f% c: v( h$ v) w4 m' Q  w.grad.zero_()  + X2 e1 Q0 X! e+ e& i* H9 g
      b.grad.zero_()
    ) ^3 z2 j5 E* K) t2 w) H1 X* O& m# {: w! [3 I9 t4 K
    print(w.item(),b.item()) #结果
    # t9 D, q# q0 i* U9 A
    4 b6 n2 K; \1 S5 w1 i+ ]Output: 27.26387596130371  0.4974517822265625
    , w' P! P; |0 f- M, d6 I4 Z----------------------------------------------
    : O3 C( g& X2 Q  g6 C- P$ `; y最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    9 k0 H& E+ {8 e6 `7 u高手们帮看看是神马原因?" X6 _+ Z# [, f: c9 E8 e6 P- Q

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ' |/ z& R7 v: B$ @
    , \/ ^# Z8 e- D8 v$ y
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?7 _/ _$ x. q( T% S3 f2 j8 \- d
    -------0 L7 q6 v3 d" x6 x# }
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    % u' S7 C; f6 s( m. w. A, x. U7 G-------# x# C( ^3 n" [6 m+ W0 C. S. P+ Y, B
    算法诊断部分,建议把循环次数改为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:238 ?# V, e6 w/ D8 v0 S6 Z( q9 j& ?
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?+ e: I+ X7 }# v7 r/ x& E9 D- T
    -------# O7 p% ?$ S" s, o" n
    不好意思, ...
    + q2 V/ i2 D1 Y, h+ u8 e4 M, C
    谢谢,算法应该没问题,就是最简单的线性回归。
    ! N: \" ]6 G& J8 I+ I( g9 Y5 h我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 , k( ?. {& `# @; N
    雷达 发表于 2023-2-14 21:52
    4 C7 M# ~8 R( ]谢谢,算法应该没问题,就是最简单的线性回归。2 n% k, O! Z+ U- G3 O' T6 Z
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    1 @. j0 w5 A% T  g( _

    : U- o1 S- _' D刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。( C' u& U0 W" n9 [
    $ }  J: u$ r0 q' R
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ' Z1 h1 R/ L* ]6 T% |
    老福 发表于 2023-2-14 22:002 i! Y0 U! F3 Z: o9 S0 X' N0 _
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。' I& ^" i. c/ M& D

    ) ~  |; t0 P: j或者把b但的起点改为1试试。 ...

      Y$ B( `3 m6 U" ?  M
    ( k# Z* I  s2 L4 F0 p* |你是对的。
    % V+ q! d( f8 m, @去掉了随机部分
    , a5 v, |" s% q# b5 K#y = (x*27+15+random.randint(-2,3)).reshape(-1)" {* }) T# Z8 T+ x% A0 t
    y = (x*27+15).reshape(-1)) ]( I* ]2 c: Z
    + z! X3 D0 x5 w+ I# g' _0 M
    循环次数加成10倍,就看到 b 收敛了4 S8 M! M/ a9 N) M( [
    w , b: o* [, ]) r/ K1 E% N
    27.002620697021484 14.826167106628418
      g8 Z6 c. {% m, i  Q7 ^  k8 \( K  a5 a- k/ G" |
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-28 11:07 , Processed in 0.029758 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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