设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    $ ?* e7 \% S+ C' Y7 U/ x4 ?7 m& j
    为预防老年痴呆,时不时学点新东东玩一玩。
    9 Z6 b4 O# x4 _5 |5 NPytorch 下面的代码做最简单的一元线性回归:" y  Q; D1 L! L# {% f
    ----------------------------------------------
    % G, D! v9 e9 u) W2 t/ f5 {0 V. Jimport torch) x: l% h% B; t3 L
    import numpy as np
    ! X1 n% R6 w$ X, S7 `import matplotlib.pyplot as plt
    5 G8 k4 ]% `4 k) limport random% P) `7 B- a* n

    . e: y5 r; w& }- Z" G) Cx = torch.tensor(np.arange(1,100,1))
    * q6 ^. q. L4 Ey = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    * E+ k1 ~  u; `" z( b, W# B4 b$ e* ~0 s
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b; k# {' k& D9 d+ _
    b = torch.tensor(0.,requires_grad=True)' S& U* Q9 @( z- h4 G5 t
    ; b* |2 S  [6 M7 ^" }
    epochs = 100
    + Y, N6 H; T$ W- l0 E- W: b) Y6 D* F. F, e  W
    losses = []" d. ~' ]- O7 K! z1 P+ V$ Q. F/ z6 \/ y
    for i in range(epochs):% _' ?/ n9 f" U% ~3 {
      y_pred = (x*w+b)    # 预测
    . X2 j; m3 q! ]3 H& I  y_pred.reshape(-1)
    0 G* _: f/ i2 [7 a2 S7 s/ S) T + J% ^: Q& d3 f: X" ^8 G
      loss = torch.square(y_pred - y).mean()   #计算 loss
    9 t3 i! \1 x; H: y$ u) E/ }8 p  losses.append(loss)
    ) x( i2 I" r7 `6 @. E  
    ; S! H7 t5 c9 X1 K, i  loss.backward() # autograd7 j; y% }& y6 R0 e/ V6 y
      with torch.no_grad():, D7 ]- d. I0 K) A, W. n9 p' ~
        w  -= w.grad*0.0001   # 回归 w4 N' V9 b, {6 X* v
        b  -= b.grad*0.0001    # 回归 b 4 n. N& B6 `$ h0 P5 Q
      w.grad.zero_()  ' v7 _, q% U. q- d6 k! v$ o
      b.grad.zero_()9 v) n. `+ z2 c. g( A5 u$ C

    + n) Y: b( p) ~4 \0 W% Gprint(w.item(),b.item()) #结果4 r* k9 Y. f0 d; R9 B* v

    7 P" v6 @+ G( I4 O# x- x' a. u4 ^Output: 27.26387596130371  0.4974517822265625
    2 A# y' h- `8 L& r  e----------------------------------------------% Q* ~5 n' U; n  i5 K* M
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。* A! u' {  _) V
    高手们帮看看是神马原因?
    0 ~4 k9 p9 v# t$ @( L

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 . j- A2 A+ G; j6 x! o( Q

    $ [+ l& d5 j9 m; v) V. Q# t& u没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' R; ]" ?% t! H1 I& R% \! I-------
    9 l$ h8 }) r6 Y. J. Q不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。, X+ k" ^% U) b0 C! l) Y+ p
    -------1 w( Y, _( i, d& N9 `- ^2 `. P1 F
    算法诊断部分,建议把循环次数改为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) m$ P, Q8 \) ^  n6 Z$ K% g' R( S+ a
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?% x, A5 K9 ]8 _" N
    -------
    6 D6 |# r" D2 @( `9 ?不好意思, ...

    1 r4 ?# C5 _1 X5 V; S* K6 y谢谢,算法应该没问题,就是最简单的线性回归。8 a6 D& j5 v) N0 _! I
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    6 R0 ~- k" |7 T6 C; j
    雷达 发表于 2023-2-14 21:52( R6 f; q7 ~6 A" x* U2 ~
    谢谢,算法应该没问题,就是最简单的线性回归。3 @# F! H5 F. q7 L2 }6 [$ S5 S
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    7 G6 ?0 D' [# z1 k: i# \" S- @6 i& `
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。+ w/ o! y- W/ F4 o8 w$ ~3 x

    $ r/ ]$ i9 |2 L或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    1 y9 d% ?) w: w7 v
    老福 发表于 2023-2-14 22:00
    ! ^6 l2 I" A9 a刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。0 M5 N8 u+ i3 Z- E5 K8 u  P4 v

    6 M, g1 `" L& K或者把b但的起点改为1试试。 ...

    / T- B5 k2 O" M8 M9 p
    1 ~+ W# i& p: b4 Z7 O+ a/ C* c你是对的。
    # W4 M( n7 U: `7 y5 v( t' E: R去掉了随机部分" D! U4 {* P9 U: a( P9 j( q
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)$ {$ n. `" u; }* t2 j' U+ c
    y = (x*27+15).reshape(-1)/ A  F. ~* ?2 ]# N
    & p. u8 \, ]5 M" R3 ~2 c
    循环次数加成10倍,就看到 b 收敛了
    9 G8 E( C$ I6 c9 Gw , b
    - I. K: u8 e; _- y27.002620697021484 14.826167106628418
    6 s$ u+ U2 P* W3 t/ |- d# F' N0 g  m/ Z9 o: ^) }
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-6 11:42 , Processed in 0.059549 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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