设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 4 w5 i5 U/ I) P- J" k+ ^

    & j, w+ l1 Z5 b' |5 e% r为预防老年痴呆,时不时学点新东东玩一玩。9 o7 w8 M( ^* Q  w* K4 X% U
    Pytorch 下面的代码做最简单的一元线性回归:
    ) I5 r# L7 E3 m# f2 ]: t1 X3 q----------------------------------------------
    4 s! \: ^* l4 N3 }import torch
      R2 J; w7 I8 |' I" n% i0 t( w3 oimport numpy as np
    . o1 k; R/ E0 R5 Q2 kimport matplotlib.pyplot as plt
    ' h8 d5 {. [4 `6 }( z/ timport random
    ( T$ L) q2 a' \5 l$ t7 T/ k2 ?5 L) t: G- ?* h
    x = torch.tensor(np.arange(1,100,1)), t' ]" ?  \# A8 ~! @6 L4 x
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    ; q! w$ r7 D9 b
    # J( Y- B0 \4 L+ S4 _w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b0 q2 e: ~5 ~9 T
    b = torch.tensor(0.,requires_grad=True)
    - u& B* a" w4 O  m0 u. \" I3 S# p  G# C, E, M4 w5 Z
    epochs = 1005 v' ?* l$ |6 F! j* B' f
    & c# J% `1 h; m4 _+ Y8 w! g
    losses = []
    + `# D, j, @6 P. `! D: ufor i in range(epochs):/ w+ W" a% R) L$ B* ]- y
      y_pred = (x*w+b)    # 预测
    ' z, E& O* ~: \! f8 j* w: @  y_pred.reshape(-1)
    8 A, d/ K/ A5 I9 y8 r  \ , i0 j* z7 `: }0 Y* \
      loss = torch.square(y_pred - y).mean()   #计算 loss" p, x, l& a" y9 j1 ]) r
      losses.append(loss). Z/ u1 W9 c9 Q! L: I' i
      
    ' ~; H! o4 @' ]3 p, p  loss.backward() # autograd
    ; t( c, a$ t( }9 _  with torch.no_grad():
    1 X& \7 P0 ^1 u0 W. r" ?& L    w  -= w.grad*0.0001   # 回归 w
    6 h1 }9 S+ ]" g4 ]    b  -= b.grad*0.0001    # 回归 b : p, k" g' V6 E9 b" N9 [
      w.grad.zero_()  & I! R6 \. |- j( s/ ~0 E3 C
      b.grad.zero_()
    2 S3 F" X$ O3 W' N+ f  _$ b% q5 Q/ D( {) n0 |) P9 x
    print(w.item(),b.item()) #结果) w. C. K4 X$ T: E
    2 l& M' @1 {* Y( d
    Output: 27.26387596130371  0.4974517822265625$ U- L1 W- T+ c0 n' ]! x
    ----------------------------------------------6 V" z. ?! N* C' i
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。- s- F( u" I) x) g% p
    高手们帮看看是神马原因?: h% ^( Q2 _7 ?

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    % P9 G3 E/ t3 n' {8 c) V% f
    + d) }8 [. {1 c6 H& P  D7 Y没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    / J% L- n$ d- a-------! m8 S5 Y4 J7 b4 M% D- Z, D
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    9 e0 m/ N' S) n2 r! n-------0 r2 M$ l  ~! B! W* n
    算法诊断部分,建议把循环次数改为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
    ) T2 c$ B0 D" c% C0 [! E! Z. y没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    5 Z5 G/ A  ~; e) ]: [-------, F2 X1 M5 x( X  f+ t
    不好意思, ...
    ) J- y( N' l; \% [5 M8 b' ^
    谢谢,算法应该没问题,就是最简单的线性回归。
    3 ?5 W3 c) M% w. k8 |我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    8 Q" L1 e3 A) ?2 M' P- w
    雷达 发表于 2023-2-14 21:52
    % x' d0 h( c% Y谢谢,算法应该没问题,就是最简单的线性回归。& a( W, Q. R8 t2 b. Y2 F
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    9 M' L1 n2 K% E5 d
    6 j+ |  M# y2 p% {7 f9 V, ?
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    6 B1 V2 H' @* \
    & W/ q* z" x2 Y2 |' I1 z$ ?或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 # U9 P- J7 a7 y( K: R) e! e
    老福 发表于 2023-2-14 22:00& k* D% J3 u* l# [' [! T2 I6 v! m7 ~
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    5 H& H) {0 y, P0 O; w0 M. B3 n7 a4 T$ W: ]7 C  }5 d6 w5 v' T
    或者把b但的起点改为1试试。 ...

    1 P+ x9 z6 t' Q2 }4 O8 R: k% z( G
    0 k- V; W. x$ M9 B, r4 O你是对的。3 c; h& y; Z! b9 R4 o
    去掉了随机部分
    # |" i3 f/ ]' }4 ?, M#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    2 ^/ K. e. Q, i! f+ {' N+ xy = (x*27+15).reshape(-1)
    - m5 D* G; I: c8 Y4 h4 |9 W( S2 O
    ! k- L7 F& T" n循环次数加成10倍,就看到 b 收敛了& M1 I7 m0 _% l* E( Z" i
    w , b
    7 a  U$ p( x3 p% `# k7 a3 @, C27.002620697021484 14.826167106628418, Q. I5 e. ^9 O& J' y3 @' I

    # N1 K: t' ~/ p+ a) T8 z和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-18 05:03 , Processed in 0.039379 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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