设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ' i( _4 F: v" q" i; L

    1 k1 g* `7 D; C为预防老年痴呆,时不时学点新东东玩一玩。1 |2 _1 `- ?8 w. u0 B9 S2 O6 n1 v
    Pytorch 下面的代码做最简单的一元线性回归:  O& E1 P0 I) ~: N% Y
    ----------------------------------------------
    4 Y+ D7 G2 H* z+ Nimport torch2 b6 g4 K& p- X6 j2 p$ ^8 L
    import numpy as np
    ' R& _% h+ o! p9 T8 W+ G* o$ Yimport matplotlib.pyplot as plt
    + J: k& S  @% l7 timport random7 d4 [* H+ r7 F$ B* h0 w

    $ N( v3 S/ w5 B) P9 h' @  Q1 x9 Jx = torch.tensor(np.arange(1,100,1))
    1 R0 `8 b) d% X' L7 }& Hy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=155 E- ~: S4 h% H: c

    5 r8 v8 }) p0 m# A+ `w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b2 R1 K7 e: A6 O& V3 }" u: U
    b = torch.tensor(0.,requires_grad=True)
    7 j) f/ E+ l+ |
    : J4 q' Z/ n, G; L1 q6 `( U! v3 gepochs = 100  p- J  a* }: ?' S2 {& E
    0 R9 ~  Q) K( G& q1 p! u
    losses = []
    4 e6 z# `% O! X+ Y, Z: zfor i in range(epochs):
    " I* P1 B# `' Z0 C7 Z  y_pred = (x*w+b)    # 预测3 ~+ J; ^& A6 G, S
      y_pred.reshape(-1)* k8 P" @! d* m6 z

    $ `: n4 ]: a; f! ?' N  loss = torch.square(y_pred - y).mean()   #计算 loss
    # ~" s$ i$ F, X, H5 r( z( q' N  losses.append(loss)
    % L1 S$ G2 w" L4 E  @3 s( z  
    " J7 o8 X/ l1 J# u& D& w5 @0 M  loss.backward() # autograd$ w7 ]' y' p# l7 H
      with torch.no_grad():- F& K/ P7 ^5 g2 m, J8 h: S7 y0 e# M
        w  -= w.grad*0.0001   # 回归 w
    0 y8 A* r. G# g, C0 V; k# z    b  -= b.grad*0.0001    # 回归 b 3 k! c9 E+ j& P; D9 ?
      w.grad.zero_()  & A8 k% p1 {9 Z) M1 d. Y( c/ k' {
      b.grad.zero_()+ p! `" N+ z3 }% r5 G* ]

      E& s, z& ], r9 U! Y9 R" K6 nprint(w.item(),b.item()) #结果
    # A( D. B5 ^; V, C2 {
    3 P4 A0 `# L) u# L9 s- hOutput: 27.26387596130371  0.4974517822265625
    3 K( ]$ R, y/ G5 G! t2 N----------------------------------------------
    . e5 g1 Q; A2 F最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ) }/ n9 G, d! ?  i' c% ~$ r5 R高手们帮看看是神马原因?& C* _- y4 p; @; N: h5 g

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    ) U" J% f) |. J& a7 @2 A
    + `  Z5 o1 j% _' B没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    6 q3 C: M% Q( p7 J( V3 S-------0 {8 u/ e) n) \' `: F
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    4 n# ?4 j: ?+ b) i/ L- B! Q-------' l5 e6 N5 y: t% o
    算法诊断部分,建议把循环次数改为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 R) y, h2 M9 S( u& q, o. v
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    , @" T* ^; C% [/ `/ K: a( t-------
    - L. Z6 g/ {( z: `" \3 K4 N# d5 ~不好意思, ...

    # Z, F5 B; v3 }; L谢谢,算法应该没问题,就是最简单的线性回归。
    5 W4 E- `% w- U! M. v我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 - Z/ h/ }( g3 D% A
    雷达 发表于 2023-2-14 21:52) H4 s& ~1 d% x0 y
    谢谢,算法应该没问题,就是最简单的线性回归。3 r8 g4 l$ [3 U2 x8 U
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    3 _. K; I; k. U9 y) u# ^0 E9 M" ]1 u
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。: g) e1 l/ A) I

    + U0 ]* N$ {! O+ ?  f1 B$ S  h$ U或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 . Y- ~" {* V. R& P4 V
    老福 发表于 2023-2-14 22:005 n/ j" N# w2 p7 ?5 M4 d/ t: w: d) s
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ; r4 S( V( R/ W  W8 Y# x8 g* a' e0 o' V, o6 F: ~: l
    或者把b但的起点改为1试试。 ...
    " C7 P# Q" A# [+ E& L0 ]  b

    7 N. W9 K/ L5 g! v. \你是对的。
    ( T, r/ O) c- U& y' c$ W) D去掉了随机部分6 G/ f  u; `6 ^2 \6 r
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)6 A! T7 H) @7 E) a) b# F, r: h
    y = (x*27+15).reshape(-1)
    ! h$ |  J; D8 q+ r6 B" o, ?8 A& E2 I7 |3 V; G* [
    循环次数加成10倍,就看到 b 收敛了
    1 l; g6 Z4 m: m. q: V  qw , b0 p& b. J/ d3 s3 [+ U4 J
    27.002620697021484 14.826167106628418+ ~- H2 \. v- h2 [# ^
    - A, H3 b3 G, ~2 v2 i
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-14 21:19 , Processed in 0.056544 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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