设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 : P6 z# k" X2 M- e- d

    . D$ h5 U$ \3 ~! J8 R为预防老年痴呆,时不时学点新东东玩一玩。2 J- K& M6 ~1 `  d5 ?. |
    Pytorch 下面的代码做最简单的一元线性回归:
    - d' \' b0 `1 K----------------------------------------------
    - `+ T  o! b' |, o" Bimport torch1 }- Q3 H; Q( B8 ]1 X
    import numpy as np
    ( Y# _* h& r7 q  dimport matplotlib.pyplot as plt4 n; e. ?5 Y0 `
    import random
    / x) S% y( g4 M( M
    4 o5 j) o$ R0 l2 Z# qx = torch.tensor(np.arange(1,100,1))
    2 g- n8 x0 I# Ly = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=153 n# [; c1 ^- o0 m9 u

    , g7 Z0 j9 o0 Yw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b  N+ l0 L! ]9 i4 A& m" _# j+ t7 N
    b = torch.tensor(0.,requires_grad=True)# ]  F9 J, `( C- l2 K4 q, ?
    : Z  L  U4 ~5 u! N
    epochs = 100
    4 z9 ?: m; U$ _& f0 M% n" I* \' I( `2 O& A) S" h, f% w' V$ ?
    losses = []
    6 v* t" d9 q/ f$ K5 e0 O  @& qfor i in range(epochs):" I+ ?# u7 V( J% `1 C0 ]; `
      y_pred = (x*w+b)    # 预测; a! m+ O; G; Y4 u6 v1 `. s, _
      y_pred.reshape(-1). w5 d. g0 B1 d5 V/ z0 c
    ; i- s% N1 f( s$ f" b( L
      loss = torch.square(y_pred - y).mean()   #计算 loss
    : q6 f* B+ y, h" G7 s0 K  `+ g  losses.append(loss)* x; K: L  |6 K; D: t! L- V' g* \4 S. c
      ) [' \2 ~. h4 u9 c* @
      loss.backward() # autograd
    # G! D) E% n6 k) {4 }  with torch.no_grad():7 X* }' s1 _% S9 s) g2 y
        w  -= w.grad*0.0001   # 回归 w
    ) _6 w# [9 @2 G    b  -= b.grad*0.0001    # 回归 b 5 H- W# N1 g7 v1 H  ^
      w.grad.zero_()  % f# \( E( @9 z) m
      b.grad.zero_()
    : e; ]- J4 B( B; j  c, X. Q9 z9 g3 n
    6 C1 {. a; a8 B4 p% J! Z, rprint(w.item(),b.item()) #结果
    " b2 J) y) @/ d$ ]6 h' o0 i  g. b* ]7 P8 X2 @" X# b
    Output: 27.26387596130371  0.4974517822265625
    ) K  A, I% W1 V: S7 S2 T6 ^----------------------------------------------! Y3 I' z) T5 I( P9 Z) z
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。; F- ~" d6 S0 c& J! c& v9 q4 q
    高手们帮看看是神马原因?8 \, P. C8 p$ z6 ~0 {3 Z

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    5 h1 w- @4 b5 ~3 T5 B
    1 D! f4 S6 e2 X3 c3 Y4 G+ B* ?: p3 h! {没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?0 d+ e1 l5 V+ `9 f1 l
    -------1 l( v* l; {* v9 v$ w' |, b, q
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。: G# p! {4 A. D# t5 O
    -------: w3 _$ t- |+ l. I
    算法诊断部分,建议把循环次数改为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:234 G5 }1 U2 H2 ]2 h8 A" T) C! G
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?6 h7 J. B, X! F  h! @# }5 A
    -------
    0 H2 z9 d0 {; b" x不好意思, ...

    7 j' Y/ i; a& N% ?) s3 V谢谢,算法应该没问题,就是最简单的线性回归。
    + g* Q+ S" N, F我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    " Z8 t# x- M' O+ E8 y, A7 Q' }
    雷达 发表于 2023-2-14 21:52
    : K) U! X/ X# R2 I- a谢谢,算法应该没问题,就是最简单的线性回归。
    6 A* s) J) Q4 o3 U; }" \我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    - s, U+ h( B- j  O

    ! x% E5 ?0 f  W) }5 G" Q  W刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。  r- s+ }% P. E  t' H( Z

    * W1 V( X( w. k+ N7 q& `或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    . P7 d- K$ S, H' x. ?
    老福 发表于 2023-2-14 22:00
    / ^7 B: I8 f* }刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    7 ^- l! S7 m6 Y: C; ?
    ; P8 K# l3 |% X) r) x; p3 n( |或者把b但的起点改为1试试。 ...
    0 B- K8 _. J1 C! F$ s2 A

    * h- O2 F/ Q) w9 ?/ h你是对的。
    / P0 l& G$ ]5 P& d. e+ [5 W6 x, @去掉了随机部分! S& r( p- K/ a; Y* r8 p  ?+ d/ U
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)+ n6 o4 q& ?) _% U
    y = (x*27+15).reshape(-1), r3 f! [' x* I5 O5 i7 q

    + ]9 _$ f% h$ Q7 f4 _循环次数加成10倍,就看到 b 收敛了3 S# }3 D! `+ @- K9 Y4 c
    w , b
    2 b! O% v! `1 `1 A  A27.002620697021484 14.8261671066284189 X$ r; H, y# G4 r
    1 F* X# u$ X" l1 ]+ U" N* ~1 h
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-19 23:57 , Processed in 0.030158 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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