设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    . D1 i6 @7 Z- t+ ~' W- ^. m5 n
    * V1 W+ g9 \  O( g$ w为预防老年痴呆,时不时学点新东东玩一玩。
    8 H0 T0 b" Q* |  a$ ^* C  }% dPytorch 下面的代码做最简单的一元线性回归:
    1 B/ ^7 {) x9 l8 {  N0 q3 `----------------------------------------------, _; G9 w( f0 J7 X7 R- ^3 l) R& Q
    import torch+ Y* e$ b: _1 e8 ]! v" m
    import numpy as np" u  S7 p" [4 m0 A
    import matplotlib.pyplot as plt
    # M* Q9 T7 e: G' Rimport random5 k3 a# E3 t# e5 e2 \1 \8 O3 }6 N

    0 |0 {/ y- z- T( i* m- Z4 yx = torch.tensor(np.arange(1,100,1))6 p, B) w5 \$ ?
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15; I. G% U0 {. D

    0 Z% x% N, V6 ~; b& p7 A' h' bw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b/ p7 J" h* a$ B9 k. E' A
    b = torch.tensor(0.,requires_grad=True)
    % `8 j9 Z% E1 X3 [* J" {7 _) h, R/ a" W2 O) q& g6 S
    epochs = 100! x, G# j% d  _- T
    ) b& g6 M: i, J3 b3 x. C2 ^5 I
    losses = []
    & ?3 D+ k: G1 B/ {for i in range(epochs):
      x# m' [0 u! S8 t  y_pred = (x*w+b)    # 预测  q: q4 ?8 T- N
      y_pred.reshape(-1). F9 n' |2 U* K# a' e$ m2 p
    & u& U" \; ]$ l6 B+ i
      loss = torch.square(y_pred - y).mean()   #计算 loss
    ; d7 R# U/ ]( q  V6 ?1 K2 d  losses.append(loss)
    , O  m$ O4 b5 Y/ p! _! h( X  : @0 o2 c% l7 m  a
      loss.backward() # autograd
    ) G: H! o9 ^/ Q) F3 |  with torch.no_grad():. |& u6 v9 M/ G- ?9 I, V
        w  -= w.grad*0.0001   # 回归 w8 h: q, J8 R4 H
        b  -= b.grad*0.0001    # 回归 b
    9 s! v& H% \0 ^* [  w.grad.zero_()  8 d- V* x" y. Y' P
      b.grad.zero_()# E" M& m# v6 g) d9 N$ d/ c

    9 c; L' f% O" m. ?  O  u) k- Yprint(w.item(),b.item()) #结果
    . e1 A5 e7 e" B6 n/ c9 ?/ O$ ~: W0 l9 X% k. `
    Output: 27.26387596130371  0.4974517822265625
    ) l/ R- A" ~2 A$ v----------------------------------------------
    + X9 n4 f  X2 v8 V+ c最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。1 K7 R( j3 V8 }% ~1 C
    高手们帮看看是神马原因?
    9 I: _. `9 b! l

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    ' j& N* I  z0 e# Y" i9 D/ }$ R
    ( F/ t/ q) u2 g9 f: s没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?0 \7 `( g; U% g9 v* k# g: I1 O, k
    -------
    - g6 a8 C* A$ N5 f( s& L: x不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。; _" {. C* Z: H' \. c
    -------
    : _5 Q% e$ R# A算法诊断部分,建议把循环次数改为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, L2 k4 Q; V) l
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ! t8 {* F! Q+ m; l7 b9 j' J6 N-------( Q4 o5 D, `# |1 {2 a
    不好意思, ...

    $ ~; q5 H1 g! Q5 P  P8 B, W谢谢,算法应该没问题,就是最简单的线性回归。
    * |- \6 E* o$ K: {' [" s% m* F2 a$ w" L我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    # O. B8 o  k  y" d! `
    雷达 发表于 2023-2-14 21:52
    ' k! w$ x" }9 n$ s, l5 m1 a谢谢,算法应该没问题,就是最简单的线性回归。; U2 l7 k5 v! B* y, ~
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    . y! G* b9 X; k2 r# o% p- I
    - E) p# N( s8 d  l. _0 N: l刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。; W; E" j2 p2 C$ {; t* D5 K! D
    + q. |1 e- k7 m( ^
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 4 F  V3 x, i5 t& Y# {! C1 @) n
    老福 发表于 2023-2-14 22:00
    - f6 `2 E. }' s2 d% T1 L/ o刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    " R; A( `# E$ H3 s  |0 i; e- y' `' {4 D5 R  Q
    或者把b但的起点改为1试试。 ...
    & l/ w6 Q# t6 E" G5 V8 \* i

    , }) k' W( B  A" z( t( o' k4 r% \* b你是对的。  V9 h3 A) i4 Q5 s, K
    去掉了随机部分1 _7 L% m3 |0 q2 u
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    . q% l9 Z6 X2 q7 {5 k' ]# e! x: t2 }5 \- ky = (x*27+15).reshape(-1)# i! X1 G7 `( Z, \8 U  d( O1 v
      @' C, G* P+ E( S
    循环次数加成10倍,就看到 b 收敛了* f  Y( n( f+ c) S
    w , b
    5 Y- G0 u6 r, y7 Y27.002620697021484 14.826167106628418
      Y7 z1 F) C" X7 ~1 G* l6 p3 M4 Y/ v% k' \+ T
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-26 16:50 , Processed in 0.054094 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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