设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    7 J4 ]! ~5 x% V
    : m2 m9 r! `5 @& r为预防老年痴呆,时不时学点新东东玩一玩。# }) b6 P/ P8 O' m( x+ \; J" x! @5 Y, A
    Pytorch 下面的代码做最简单的一元线性回归:
      Q$ q+ u0 L4 r8 Q----------------------------------------------
    * N  h0 I+ }9 }import torch" {! y8 E8 A+ E7 k
    import numpy as np
      x+ Z. H) O  ?; bimport matplotlib.pyplot as plt
    8 X4 B  |5 R: m4 z% {& L2 p5 z8 cimport random
    4 q7 B, n7 [: `# v9 e3 x# Z: L- o+ m( B" }# {: @+ h: \- N
    x = torch.tensor(np.arange(1,100,1))
    + Q; G' S. B+ @% o0 ^9 ^$ Oy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15% s( A: v% r* [" E% G
    % k- P8 g" F$ u1 j# A; z% C% k
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b6 t  @: ]+ b" a8 H. N# D
    b = torch.tensor(0.,requires_grad=True)& u& r4 R& G9 n
    5 t6 x7 x% b- T
    epochs = 100
      N: N+ X$ K" ?4 V$ M
    . A0 H% n  [: v7 c! @5 g4 klosses = []% R' k6 d# b& B
    for i in range(epochs):! n6 u& E8 ^! p4 i3 x+ x& l
      y_pred = (x*w+b)    # 预测/ n. r6 m/ U& X& ]/ y6 {7 h
      y_pred.reshape(-1)4 j- B# I, e  C; D2 n. l
    9 {" W: b5 D# p8 T2 r5 Q
      loss = torch.square(y_pred - y).mean()   #计算 loss
    : }( {1 w: i4 t6 d  losses.append(loss)
    8 c. f# V, [9 G/ D  ! R; v$ g7 K( G6 f# J( V8 f4 A
      loss.backward() # autograd
    5 c' [5 o( K: F9 B* r! ^2 @: H# k  with torch.no_grad():; O; I  T. \0 l" U1 K' `
        w  -= w.grad*0.0001   # 回归 w  m- `$ u" n$ N2 g
        b  -= b.grad*0.0001    # 回归 b , K5 `6 d9 Y6 O0 Y- v
      w.grad.zero_()  7 K; e4 M3 ^! k3 x$ V7 k+ W
      b.grad.zero_()
    : F/ X5 b3 g1 [
    3 O+ r, D  [4 ^5 ]  P: V# zprint(w.item(),b.item()) #结果
    . V2 C8 p$ i$ d) h5 ?* L# L. ]* N7 p7 E6 S% J. K
    Output: 27.26387596130371  0.4974517822265625( x5 g6 h+ f: X& V( D; y
    ----------------------------------------------5 Q* ~" e9 r( o0 j" M, m; }2 e/ w1 h
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。5 E) Q  Y1 R) Y+ b; B/ `
    高手们帮看看是神马原因?
    - |; k/ u9 i* y" c

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 7 X5 F8 K& n' u' y. U0 u
    : N5 ^, |2 w7 c, {. Q) M" m
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    2 V( N7 U1 t$ ?5 A! z' }-------
    / j% e4 U9 a8 ^0 [4 z( @不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    # u$ l& u4 F* W* f8 x/ _$ K* ^-------0 p- J* j( c1 D" }+ N; ]- w
    算法诊断部分,建议把循环次数改为1000, 再看看loss是不是收敛。有点怀疑你循环次数不够,因为你起点是0, 步长很小。只是直观建议。

    评分

    参与人数 1爱元 +10 收起 理由
    雷达 + 10 谢谢建议

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    板凳
     楼主| 发表于 2023-2-14 21:52:57 | 只看该作者
    老福 发表于 2023-2-14 19:23) v; z) z) m$ R& B, K4 S( W* K7 r
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?/ y( [5 L+ e7 ^2 p3 N
    -------- H- q  z" s8 d/ M! W
    不好意思, ...
    " w* c$ t: s# K3 B2 }
    谢谢,算法应该没问题,就是最简单的线性回归。
    6 W1 h, i5 i9 P+ |我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    8 I& i9 A, ^# i# a) v: ^' e# A
    雷达 发表于 2023-2-14 21:52
    2 g' g$ U) d( Q4 x谢谢,算法应该没问题,就是最简单的线性回归。  R! @# w& B% {/ ?7 y
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    5 C. G9 F; g6 J2 u. O1 B" S& N3 |( x' n9 y
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    6 y: L4 ~0 S3 P6 `7 l
    8 i) c) m/ \: @* s, ~' M或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ! r; W8 d8 C9 r9 F
    老福 发表于 2023-2-14 22:008 G; w( _  [. h5 x. g
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    0 _; R+ M# j# R7 e$ ]
    6 h9 B- d# t" b0 E! d1 f. B或者把b但的起点改为1试试。 ...
    9 e5 X; E* ]- @) G# Z
    : v) p' r7 Z" M3 ~4 E) h
    你是对的。% v6 {* L7 p! e, q; f
    去掉了随机部分( v% a, w. o- _9 U+ p( g
    #y = (x*27+15+random.randint(-2,3)).reshape(-1): x$ B# ]/ b' f! w5 ~1 C3 K8 k
    y = (x*27+15).reshape(-1)
    ( |. |8 ?- i& b. y# m' [& w3 z: j3 \: ]) C; s' T
    循环次数加成10倍,就看到 b 收敛了
    . l. h- Z. {4 Xw , b
    3 k3 R% E* s2 u* m  L8 N27.002620697021484 14.8261671066284180 c# z8 Q( z2 y' X7 t9 K: u3 @& x
    / w7 A+ z+ N: |8 {0 u, }, G
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-5-10 03:08 , Processed in 0.034566 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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