设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    5 M* I& w5 M6 M( F1 u$ k5 f
    4 U8 E: O& d3 g, z+ d/ h; |为预防老年痴呆,时不时学点新东东玩一玩。' N- Y. c6 d" Y" @0 t
    Pytorch 下面的代码做最简单的一元线性回归:% n; o2 |7 L9 F0 t, h7 a! r
    ----------------------------------------------
    ' w4 R! v5 t3 Qimport torch
    + O+ M- r$ x9 ~4 D+ `import numpy as np
    6 I, |0 X! D3 bimport matplotlib.pyplot as plt& b& \3 P1 X' K
    import random, _# O* f' n* P2 J
    9 }! r" G$ J% z! j0 R- ]' W
    x = torch.tensor(np.arange(1,100,1))
    % W& Z# f. g9 }, L) {y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    8 a( L* h; j9 x) U0 n
    6 @4 ]0 c: d& o* z& hw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    + U( D- }% i; Y6 Xb = torch.tensor(0.,requires_grad=True)
    2 |8 G2 N4 t9 r) r& H5 [$ n
    * `. k2 \8 K/ q! tepochs = 100
    + L' m0 H$ w: q, h* j9 ?: g/ @
    / A6 A3 x, f3 Dlosses = []
    2 T& `  N+ `- F2 L& g* Y) @for i in range(epochs):3 E% U9 R! G! I8 k7 t
      y_pred = (x*w+b)    # 预测* H% B* r2 H6 m  P/ j
      y_pred.reshape(-1)
    & S3 M: _* N) _4 J  g0 D+ z& ]2 H: x
    . L8 n6 A9 @$ y: h8 n1 ~/ j# \8 e  loss = torch.square(y_pred - y).mean()   #计算 loss
    ! N( z' j$ A: T  n1 d& ~5 Q! E  losses.append(loss)  P! N% [( v7 O
      * J+ c$ k0 }/ u5 }0 }
      loss.backward() # autograd
    ) z( c6 C; k7 _5 O' E5 R+ j  with torch.no_grad():: b- k/ ~7 l1 {
        w  -= w.grad*0.0001   # 回归 w- j5 Y. \( l8 C) t) K
        b  -= b.grad*0.0001    # 回归 b
    ) l: {7 @. {3 e; ]  w.grad.zero_()  # [1 [& h4 c0 c- \
      b.grad.zero_()
    * b+ F8 O- ^5 z- E* D6 r) z0 c
    6 ?1 ~- ?! P7 u/ c1 W: _0 V; Cprint(w.item(),b.item()) #结果( M! H) ?% }# B2 n: m$ [5 D) E, {

    + M7 S( y0 q0 \: }/ X; `Output: 27.26387596130371  0.4974517822265625) V, Z# f1 [  L& Z
    ----------------------------------------------
    & U% E5 u. P' y+ R最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    3 V" Z9 n2 u5 L* h! N- ]高手们帮看看是神马原因?
    - F2 [3 X1 C- q9 d

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 " N! F8 f0 H5 j
    ' E1 D. e3 H! R2 B- G" W- X
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?1 u5 x& |& Y* w6 b  ]/ ^9 u* r. P
    -------' g3 p5 i: d, a% X* v9 O* S5 b
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    + k( g0 N5 @+ v, l) n9 Y% Z-------
    - l7 T$ U/ j4 ?3 Q  S; F- P8 f7 v算法诊断部分,建议把循环次数改为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
    8 S, g7 d+ \5 U. W  S* ^没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    + f! S0 G. ^" T  m-------
    # g5 l9 X. j' @" t% L不好意思, ...

    & E# l% q8 j; y  o, T谢谢,算法应该没问题,就是最简单的线性回归。
    ' v8 i4 E) M& D我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    2 i8 Q/ \6 ~7 |* {" S) r9 R5 h! L/ g0 K
    雷达 发表于 2023-2-14 21:52
    * Q) j0 k1 j$ G* x' N谢谢,算法应该没问题,就是最简单的线性回归。
    5 t1 g0 l; |: V) q- z3 Y! d' @: D我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    / k: Q* H. L; k
    : x& A* O9 B( ^5 l# v% s刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    : x) {9 C+ n8 q4 O0 T. ^- O6 G" c# S+ o: m5 F6 L; }
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 * V5 W% ]: n; U/ }6 I% ~
    老福 发表于 2023-2-14 22:00# ~4 b! _9 z/ s4 d/ `2 g
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    # b! Q' ?6 j1 Q1 y1 i$ R( j# I$ y, B. h  J: i
    或者把b但的起点改为1试试。 ...
    % ?$ V6 R6 q7 ?0 y

    9 z" n5 O9 W5 R; j4 W( B! J! b' g你是对的。
    4 S, z' S$ h4 W8 f8 e去掉了随机部分4 e/ {# ?8 a5 D8 s
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    9 @% M% e0 c8 r8 hy = (x*27+15).reshape(-1)7 X- {9 i$ X0 [  d2 e# t6 a& ]  d
    ! _; l) J5 X0 ~: h6 i
    循环次数加成10倍,就看到 b 收敛了
    6 V5 U7 S% _0 g- ]( @  Cw , b8 A2 N: @* e6 x$ K; ?, U
    27.002620697021484 14.826167106628418$ X! f3 t/ M5 [6 T
    0 O0 Q3 t6 q3 R! W! K& j
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-12-12 11:51 , Processed in 0.030751 second(s), 17 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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