设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 % ^- r7 {+ ^/ h- J( G, u$ q2 B
    4 Z& u- L9 u8 G* N4 r
    为预防老年痴呆,时不时学点新东东玩一玩。+ k4 n! x2 H* \5 h  y/ S
    Pytorch 下面的代码做最简单的一元线性回归:) x- W& k/ X3 @, G- J3 g
    ----------------------------------------------
    8 B: Z5 N" [, a( Q5 himport torch/ Q2 k  @' c* I3 g
    import numpy as np$ G8 _9 Q, {; P! v) S
    import matplotlib.pyplot as plt
    : A$ p- J; _  J0 E+ k5 y1 vimport random
    4 G  \' {, ?3 }7 ~; `9 E4 ^3 t; Q# q$ F7 h$ R2 \; W! t0 h; W
    x = torch.tensor(np.arange(1,100,1))2 @5 q, o* ]6 ~
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=156 `3 {6 s& `# i
    + o6 p( W0 g! a8 |9 k6 z
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b9 V. o! K$ t2 Y, Z3 C- V
    b = torch.tensor(0.,requires_grad=True)
    6 w/ V/ P( |' s8 J$ O. H& A5 _* {' l! J2 v, B- P
    epochs = 100. }, }- u- e* J. }2 n* y

    * ?1 I) p! e, ]losses = []
    % e* B% a0 G9 p  f/ Zfor i in range(epochs):
    2 O$ }, x: q8 I$ V  o8 ~  y_pred = (x*w+b)    # 预测
    . {! b: K6 I+ E/ J0 [: g' A+ n2 b  y_pred.reshape(-1)1 F" u# g, _  c
    0 L2 W/ f( T$ P' C
      loss = torch.square(y_pred - y).mean()   #计算 loss) w7 Y" w5 A, D. s
      losses.append(loss)# }) _8 u* G. _, C9 j# `, g; |
      & V! b% S/ h) j; S, _1 e. F3 @# i
      loss.backward() # autograd
    9 }' b5 C% ~9 _2 ^4 ?: U+ R: Z, ~  with torch.no_grad():
    - Q) x4 A/ ~0 z8 Q' [/ Y    w  -= w.grad*0.0001   # 回归 w
    8 l8 T% d# g5 d: b: ^" j    b  -= b.grad*0.0001    # 回归 b 7 n6 T. b, X: N2 J5 H% ]) x/ t! q0 s
      w.grad.zero_()  ' R. g" D/ E- p+ ~, v+ g3 a0 \
      b.grad.zero_()
    " u& o$ Q% `* K) u% D
    8 o, }) O9 N* e( \4 Xprint(w.item(),b.item()) #结果
    5 Y& q. c& I% v8 G( ?
    ! ]9 b2 r+ W; T: K+ t' E# H: uOutput: 27.26387596130371  0.4974517822265625
    ( L# y- L, g4 i2 C( N" {----------------------------------------------6 ^: B: D: X2 T+ l8 p2 B/ C
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。; F8 {: n. f# U9 R! \* Z, A# J
    高手们帮看看是神马原因?, C" B2 _- ?$ A" z- T, s4 N; B

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ( \( v  l" u3 F+ m% D( e$ \
    4 r2 t  q5 L% O1 ], w
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?8 Y' Q2 |4 I: c' H2 Z8 n) ?& u
    -------
    $ `+ c# L+ h% v不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    + ^) B0 K* }( d' D-------' P5 c) s0 `" q! }; i1 G9 m
    算法诊断部分,建议把循环次数改为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:231 W9 Z$ W  Z: I& @7 ^2 p( k; v# q+ C
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ; I3 E$ P; k) t# _- U3 T-------3 s( \. l% s9 W5 O3 v( ]* R
    不好意思, ...

    4 h/ Z% x( `3 j谢谢,算法应该没问题,就是最简单的线性回归。
    3 G- a) ?9 Z& s, M% a5 H" V我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    9 j7 W+ L) l/ e
    雷达 发表于 2023-2-14 21:52
    4 n9 _3 L+ H2 T- l/ r谢谢,算法应该没问题,就是最简单的线性回归。
    : _( [. C( z6 x3 B  ^- _  g$ i我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    0 W2 a: J) b" N- b
    . W* h4 h0 a1 ?
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。& x/ u- ?0 `8 y+ O
    5 G( B+ z1 C9 Y3 C5 z% F
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    4 |8 N8 ^/ g# a" V: Q! |+ o
    老福 发表于 2023-2-14 22:00# d/ J$ t; c8 I
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ( [: w! x1 i" O' [3 \% h7 H$ X8 i7 D5 s: `
    或者把b但的起点改为1试试。 ...

    . z+ [( W4 C# u: ~
    ; `% U$ h1 @+ g* S3 d  s4 L你是对的。3 h4 d; N1 a  U3 t
    去掉了随机部分
    2 |* K. F; J: q3 o/ k#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    8 E. s3 k8 F& R" q/ T- @y = (x*27+15).reshape(-1)
    - u6 A7 E( v  n2 _; z4 d; E* M! ]
    0 n9 B. q2 u/ S9 m) f! \0 E循环次数加成10倍,就看到 b 收敛了
    2 [9 ^. _$ ?/ |' K; h6 L: ]- Ww , b
      |8 C* Y+ ~' P! Q' _& R27.002620697021484 14.826167106628418
    + I  t4 d' H- e& H. q/ L$ \& U& ^! _
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-12-23 00:42 , Processed in 0.031225 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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