设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 : Q  s9 @0 i4 e9 r* h
    ; ^  k8 c, A8 ]
    为预防老年痴呆,时不时学点新东东玩一玩。* w# E9 F& J% ~& _4 y  M
    Pytorch 下面的代码做最简单的一元线性回归:0 Z; x  w* w$ z* v$ b
    ----------------------------------------------, L' y2 ]0 T' i4 j
    import torch
    ! l! l! C( a$ yimport numpy as np. {# y8 q: T) e' C
    import matplotlib.pyplot as plt( L. `. M5 d. x; B/ t
    import random" h: Z7 z; O$ t: i

    - o0 Y+ ?; }& @+ @( m2 Fx = torch.tensor(np.arange(1,100,1))( g% l/ P, G1 U* F
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    & Y# x' H% T+ w# U4 ]
    " m+ B: r7 q4 A# g1 _& T* H, Y) Iw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    8 @0 S2 N3 V' X' J! _# B  Hb = torch.tensor(0.,requires_grad=True)
    5 f7 {% @8 l: ^" s
    ) l% q* Z5 O+ Sepochs = 100  Y1 y* E8 h$ }6 x) p! j- i. Y1 \1 n
    + x# _: |7 o' W8 Z% \$ m
    losses = []
    2 N( E1 O% k: K7 Bfor i in range(epochs):
    4 S$ ]' D; Z4 O: P$ a  y_pred = (x*w+b)    # 预测' H, a! g% _6 s' z" R( L
      y_pred.reshape(-1)
      l0 a% ~! ?, x8 [; f  N, _6 q
    6 A# m9 c8 a4 P  loss = torch.square(y_pred - y).mean()   #计算 loss
    $ w' x/ \7 ?) b& N2 N  losses.append(loss)
    2 B: r; f. r; Q  ^1 [1 r- d  3 R3 q& j& V+ M* |/ b
      loss.backward() # autograd6 x% t$ f% M: o) e
      with torch.no_grad():
    5 G& L, h  W# |$ v, e) W, f" q# r. ?    w  -= w.grad*0.0001   # 回归 w
    " C3 e" ?# z4 M9 C' g7 L" i    b  -= b.grad*0.0001    # 回归 b
    % Y' \) t/ P" \' |- \; `  w.grad.zero_()  
    , x9 X' {5 E" u: }, ~  b.grad.zero_()
    8 q  T' j) T7 X- D2 x
    % ^' l$ l. u4 B7 G) S; o9 V$ Sprint(w.item(),b.item()) #结果# c+ C3 U- B- u+ X( `1 ^+ }

    3 x$ V3 Z, v+ d" ~& h7 mOutput: 27.26387596130371  0.4974517822265625
    / Z  x& ~( m" f0 P$ K4 g0 H----------------------------------------------; `/ J2 w/ p4 X, u8 Y
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    + w1 K9 ?9 t0 y高手们帮看看是神马原因?3 p) u+ ~0 M" k( [8 K

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    8 n- J1 U! r0 T' H3 A( s8 P! y4 z, _
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    & F8 S( i4 C3 N" K2 u-------( k# W; }, K3 z3 N
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    7 j7 r3 e( r  f% y7 Y' n-------
    / r( u2 N5 w* {1 V5 J算法诊断部分,建议把循环次数改为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
    ' i$ M- P/ R! L6 u$ X4 D& f. E没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?2 U) V5 |( s  M/ `8 J, f; F7 l
    -------
      I$ P. R" d: B; E7 W不好意思, ...

    0 S3 K6 |6 E% ~" J+ D3 h; ^; z- x* I0 Q谢谢,算法应该没问题,就是最简单的线性回归。- j* C. M6 G! g' K- m+ a5 S' O
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 ( b1 P4 e5 X1 a2 p7 T
    雷达 发表于 2023-2-14 21:524 N  Y+ c  D5 Z: U# E
    谢谢,算法应该没问题,就是最简单的线性回归。
    - B# j9 Q+ G0 W6 |" y0 M我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    : _+ Z; N% T. N6 C  h$ P  h+ T( z2 L$ Q# t1 Y
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    . v" a/ u6 [4 W; j& N9 T$ [; F0 c( D: G% U) L; d
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    4 N, ^- l3 N1 x7 J. v
    老福 发表于 2023-2-14 22:00# b4 F8 M! S% d5 a
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    $ w9 [/ S2 H' |; g& m' U( d- z! D5 W( C6 C) ~0 @+ E
    或者把b但的起点改为1试试。 ...

    ; O- E! F, T5 k, m  W* x* ]- S  u) K: e  K3 _
    你是对的。7 n7 f7 y7 K  E" ^& \$ i! q
    去掉了随机部分& v1 b0 s% p; _8 ~
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    % Y+ C2 w. ?6 @4 G. X# X! ry = (x*27+15).reshape(-1)$ c7 T# B# T. M, T- O
    9 T% W5 o( ?' q+ y, d. U- _- @( D
    循环次数加成10倍,就看到 b 收敛了
    " Q: o7 ~7 o1 c6 \, Iw , b& H  y6 ^* X9 f3 ?
    27.002620697021484 14.826167106628418! h* o  E( F8 P3 V7 T, R4 H
    / `0 z  p' {! a2 p! W
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-5 06:59 , Processed in 0.072938 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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