设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    / ?; e6 _/ T3 ~. E/ d
    1 w+ o0 O  c6 H) r5 N为预防老年痴呆,时不时学点新东东玩一玩。4 X1 v# j9 V/ m0 |# }6 Q
    Pytorch 下面的代码做最简单的一元线性回归:" q. `% d8 [$ W4 i5 G- V' z
    ----------------------------------------------
    9 x8 ?( T9 O0 Z1 M( b0 `import torch3 c) v, H6 ?5 W0 f) x
    import numpy as np
    1 u- u# k2 R, p# R# i8 ]- w* }import matplotlib.pyplot as plt
    + M3 s# a$ t2 j6 F8 S0 @) l# ^import random
    7 H3 r0 i5 S: r: r3 M3 B
    * U( T; Z; s7 ox = torch.tensor(np.arange(1,100,1))
    * o! p/ M9 `5 U' Ky = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    # H3 M) L! _' U. o9 o3 }1 H4 f
    , A1 `1 L/ _7 I) P- z- Jw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    % Q: n1 k8 x4 f4 r' Pb = torch.tensor(0.,requires_grad=True)
    0 j4 E, a8 r4 V) Y. R% ^0 K$ F- i  ?( z" C' N% R' t
    epochs = 100
    ( ?- b; o' B: [) b
    ; |/ e3 M9 H, Y# T! I1 llosses = []8 U& Y8 q) K, k% B7 h) x% R
    for i in range(epochs):. y" X  {! j2 e9 l. N) |( \5 o& [
      y_pred = (x*w+b)    # 预测
    ( f, K1 |. Y5 K- ^+ N  y_pred.reshape(-1)
    * g9 U' h# R6 t3 j7 k / k" Z5 }" b& z* {' L
      loss = torch.square(y_pred - y).mean()   #计算 loss
    3 s1 i* P! W4 a0 ]1 a/ A% X% }6 }! E  losses.append(loss). i: H' V& A5 B; a- F6 |% l3 I' [
      6 k0 Z+ r9 T& K- b* i8 ^
      loss.backward() # autograd
    : Z% L: v; K, |4 U  with torch.no_grad():
    + \6 K3 Y0 ~% i  f2 d0 ?    w  -= w.grad*0.0001   # 回归 w
    : w+ ~+ ^" Y( j; o    b  -= b.grad*0.0001    # 回归 b
    ' ?, M' v7 s1 q3 I  P* E  w.grad.zero_()  
    " l/ l/ e* H* E. U. t& j& S  b.grad.zero_()+ q+ _' a3 f' O/ N( ~+ f+ M

    ! h  J% Q2 g- }3 l: t$ T' l' Gprint(w.item(),b.item()) #结果$ B, V' O: g- V/ P0 S- [8 `

      w# `0 `7 a. t3 T, {Output: 27.26387596130371  0.4974517822265625" V; ?! V$ H2 c9 Z+ T% e1 R, T
    ----------------------------------------------
    " e' J! K+ u- e! b  Y6 m最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    " ~, q. U) o* }$ |  f; L% n' V高手们帮看看是神马原因?: Z) z+ x( r: y' w: w" x

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    6 ?8 _1 T9 B7 K  h- K& w
    " u* b& s# Z' B6 u- ?1 ]9 u9 C8 e没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    3 c+ B  o7 k3 k-------
    1 G$ j" l& R3 a. D不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    / @  R9 D# m5 J& {-------( P" @+ K( i% u1 S8 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) J. l( q" |9 z1 p% F9 m) S
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    3 p- j) s8 ]: [-------: ~& k: v/ C5 @5 U
    不好意思, ...

    - [' Z* x+ V( w; y' ]( @谢谢,算法应该没问题,就是最简单的线性回归。
    ; m% P# j8 P; i7 Z我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    % k1 K9 ]- p  [, J
    雷达 发表于 2023-2-14 21:522 K( C8 X( d1 L
    谢谢,算法应该没问题,就是最简单的线性回归。
    6 |/ k/ Z* e) u! ]* |我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    8 k  u, e3 a# }3 i4 T7 o7 K4 k0 R( h( z  [+ E- r8 o5 b
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。2 A* p" F+ i0 e( B( R/ m: C1 W3 u/ u
    0 [$ R- e  i3 J( N
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    : V7 Q! ]+ e7 m* a
    老福 发表于 2023-2-14 22:005 _8 m4 b$ m/ a; I/ |9 D
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。* x' O, f! V- Q% R( k* o2 q/ x3 Q( y

    6 g* P+ Z) D5 ^5 a7 Y) r& C5 y; H或者把b但的起点改为1试试。 ...

    - f4 z) {1 X8 r- |# Y5 I& |" t3 I+ H$ h1 a- G
    你是对的。2 H: n0 S' [, U: ]' P% j) _$ Y
    去掉了随机部分
    " W5 n' t* ?# t# i: m- j#y = (x*27+15+random.randint(-2,3)).reshape(-1)7 F; [5 s- m6 v2 `& Y
    y = (x*27+15).reshape(-1)
    % N/ l: p/ M# m0 V' {" E8 }+ ?9 f- \) }0 [5 x4 R3 e7 @7 O7 S. q* K
    循环次数加成10倍,就看到 b 收敛了$ p% f9 M2 ~( Y1 q* B+ b& L  g1 \
    w , b
    ; E8 x5 ]/ S3 @% `9 i27.002620697021484 14.826167106628418
    # t8 r: m9 y% _: L5 q% F
    ! C, s' K+ H0 A- `* [8 r. R+ R4 u和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-7 11:56 , Processed in 0.030877 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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