设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ; N3 I/ n2 L4 @6 {! L1 H

    3 C9 ?$ s/ A3 j' N' k/ o- S2 z为预防老年痴呆,时不时学点新东东玩一玩。
    2 b* i! o2 L. APytorch 下面的代码做最简单的一元线性回归:- \0 _! P* q: \8 c$ O7 W1 y3 u7 k8 q
    ----------------------------------------------
    2 {( a  N8 I& f1 I  y+ \" pimport torch
    " i9 I- F5 D8 q% x0 nimport numpy as np, e/ _4 E( M/ q
    import matplotlib.pyplot as plt
    8 ^4 I9 |4 P5 b) Jimport random$ A1 Y  S  V! I& p7 d. G! c% \6 _
    9 [. g7 Z# ^, S& K6 t" @
    x = torch.tensor(np.arange(1,100,1))/ E2 \2 @) l' D
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=156 N( a/ j( l6 M) y* o

    ! J- O( n2 G$ G! ?& P" v; Aw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b$ _( W/ c2 A3 N# Z/ t
    b = torch.tensor(0.,requires_grad=True)  A+ {# @, k0 U

    % I: d" I2 I  O3 P7 T. o6 b; T* eepochs = 100
    $ H" b% E& p# ]+ U& a. U7 S/ |+ h
    losses = []* I- n: {; _2 H7 V
    for i in range(epochs):1 i# c+ T$ e4 H0 l
      y_pred = (x*w+b)    # 预测# a. s$ o& ~8 H4 V+ H" a
      y_pred.reshape(-1)! L) Z5 S. d: i! U& n3 B- i+ c
    # O9 T$ K; i$ s- |$ z
      loss = torch.square(y_pred - y).mean()   #计算 loss2 N4 \- W, F- M# A1 K) x
      losses.append(loss)6 c4 t! i* q4 J( i" u. U2 x5 d
      ( `) h3 i8 ]& |
      loss.backward() # autograd
    , v% S# N  T1 q+ ]% y( c6 P  with torch.no_grad():2 v! F8 U6 T9 J2 u
        w  -= w.grad*0.0001   # 回归 w& S, s1 ~3 G1 s
        b  -= b.grad*0.0001    # 回归 b
    & p- X5 E; ?9 G) ]. u+ a  w.grad.zero_()  
      Y9 H% ]0 V2 _( l7 l  b.grad.zero_()& U4 E& {% P' v" B1 x  V. b, V& D

    . m$ }( U( a! f; I, Q/ Zprint(w.item(),b.item()) #结果6 J, m( v1 H/ h+ n' K, J

    ( _7 c* {  g5 s$ P0 u( c: NOutput: 27.26387596130371  0.4974517822265625* m3 l5 o1 E3 X2 Y$ |1 s& I; \. |
    ----------------------------------------------
    9 z5 y, r$ u6 K2 ^! u' Y7 g最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ! q% k' R" B4 |) [0 M6 x高手们帮看看是神马原因?
    7 L5 {7 f) P! l) ~! _% C

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 / v( e; @5 c; G& S5 Z
    : x" i4 n2 e8 q  @/ |! F
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    " U+ m2 ?+ R# q6 g8 z2 J-------
    / g. l4 y3 G  l; ?不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    1 ]% k7 i1 V' B7 d2 M3 v" i-------
    1 D% m9 `' N4 ~- g1 x算法诊断部分,建议把循环次数改为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& S4 F/ Q) x0 X& s  y1 b
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?& C/ |8 G5 r; ~5 u; r* j
    -------. W" V6 N  v  a. x( J' x! S
    不好意思, ...
    1 U$ N( a, N# l: F- S0 X
    谢谢,算法应该没问题,就是最简单的线性回归。3 X* a5 f- s8 i
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    # Y3 R  q, Q- a
    雷达 发表于 2023-2-14 21:529 |- h) ]1 `, u. a5 t
    谢谢,算法应该没问题,就是最简单的线性回归。, ]1 w+ b6 l9 x! d8 Y* _
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    8 j6 p8 w3 X& \* \' ?# D6 b: R5 L. l+ G# I8 ]( P
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    8 D- K% g. [+ `( ^6 m% Q; L8 X
    " E# _# U* y( X, _1 _& X2 q( B5 ]或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    1 N/ q! {! i, N( S% i3 d
    老福 发表于 2023-2-14 22:00
    : Y# O- L5 i( ]刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    3 @' N- S+ _$ K! c4 y* u7 N; r+ w+ n; F. F+ E
    或者把b但的起点改为1试试。 ...
    % ^6 [' y, c2 A& I$ R  f  J! h

    4 D! ]1 u5 p+ c8 r1 X1 j你是对的。& Q( F5 r+ t! P/ [% H$ S
    去掉了随机部分
      d: ~! N1 r5 b3 z, v#y = (x*27+15+random.randint(-2,3)).reshape(-1)3 F  i2 i/ h, O* N; V4 T
    y = (x*27+15).reshape(-1)
    1 U  K8 b# [5 @3 \4 O+ e, `! x9 p3 v2 @8 B3 K
    循环次数加成10倍,就看到 b 收敛了
    - W0 \# s  o. J9 [w , b, F" w/ Y; O& i
    27.002620697021484 14.826167106628418( c% t! o* y5 K9 ~& ]  u  _
    * W% S, C7 _' }
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-6 11:04 , Processed in 0.064457 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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