设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 & C5 i2 Y- p8 P
    : E9 \; `( _4 y8 L
    为预防老年痴呆,时不时学点新东东玩一玩。
    + g  t+ e2 ^' s) ZPytorch 下面的代码做最简单的一元线性回归:+ p/ o! y6 O) ~
    ----------------------------------------------; r( Q+ U9 M1 w$ L
    import torch
      r% p+ c6 r/ z$ q& M: n6 aimport numpy as np1 c& h  r! Z+ g; `
    import matplotlib.pyplot as plt
    : d, T% X4 o( {' m4 l; Y$ Qimport random
      i5 d( g- ?# }6 m* i5 X) X
    / o* T& t5 [7 l5 H# F0 z8 E# @x = torch.tensor(np.arange(1,100,1))
    1 e  M/ R- n5 xy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15/ C% d8 Z; c) U9 `# ~
    + n" W5 R; L5 b
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    - p- O, f# k7 sb = torch.tensor(0.,requires_grad=True)
    4 B0 s9 _$ [/ g" a% O- a4 G8 g, ?/ ?0 \8 i' W: b8 m
    epochs = 1004 g* i; C9 j- n7 S& {4 M  L- s
    0 t7 L; Q5 D+ h0 N4 f$ @
    losses = []6 p- m- y$ {4 P; [) D7 {4 T: i
    for i in range(epochs):
    . r- i3 b1 k2 t+ N5 A  y_pred = (x*w+b)    # 预测
    0 Q! g4 B  K! o  y_pred.reshape(-1)8 a1 c" h* u4 d3 u5 F( g* _1 r
    ! c( |7 G; A$ b7 L& m
      loss = torch.square(y_pred - y).mean()   #计算 loss. }9 R. \$ l6 [
      losses.append(loss)$ e: C3 {0 K1 g0 y, O8 e
      ! n! B1 v, T- C' O
      loss.backward() # autograd! w2 ^: o: O/ O# {
      with torch.no_grad():
    . h! D( |  }+ m5 a% ]    w  -= w.grad*0.0001   # 回归 w
    0 j* {( I+ _4 o" ~1 p3 i+ Q' m    b  -= b.grad*0.0001    # 回归 b * t! S, L/ s2 I- b
      w.grad.zero_()  
    # M/ J) K, r6 a: z  b.grad.zero_()( W, o8 y/ j; j! B: B! d& y

    2 M1 _" M6 x: i" f6 \: w5 s; gprint(w.item(),b.item()) #结果
    ( d* e; }0 r) N- B8 w6 n+ \' ?7 a
    & h) b6 `3 @! E4 n' jOutput: 27.26387596130371  0.4974517822265625$ `1 @! U! }+ V) H
    ----------------------------------------------1 F3 O  n, ]- R2 Z
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    9 H1 B/ f1 t, e# m8 C" D  [+ o高手们帮看看是神马原因?
    % X( y! L: u8 ?5 A% X3 R- M* |. O

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    ! Z, L4 ~- N9 W! |! C& M+ U4 k1 n; v* [9 g  C% e
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?2 w8 g- J7 G  g# `. p! b( D
    -------
    ) c- F8 z/ s3 m! \. N7 z/ x不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。( D  s0 v! Z; K$ Q0 J
    -------
    , J- L' C/ {* A0 n2 ~" E( P2 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
    2 U* v& L$ J% |, Z没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?" i  b" @# \$ X
    -------
    $ @! g' P/ ?: O不好意思, ...
    ! p' Q2 F" G# o- J- s$ H, j" f% ]0 ]
    谢谢,算法应该没问题,就是最简单的线性回归。
    9 F. r$ p2 Y; V) b/ _: F% p% m我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 , y- g1 Q2 j4 T5 O, l
    雷达 发表于 2023-2-14 21:52& d  f) p& A8 Q7 b( D" b
    谢谢,算法应该没问题,就是最简单的线性回归。) m3 R; U( M( d2 z: \
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    $ K/ D: h/ p, E
    % M) ?. v5 J( X刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。4 b) `7 d  g5 c) S
    8 W3 W) \. j9 X- Y! \% {
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    5 }+ ]* `, Q" L% V( t/ _+ q
    老福 发表于 2023-2-14 22:00
    7 M5 d% v: M8 H5 v4 L* `刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。0 `$ b& T! {" E; q3 }! C; i- L
    6 E1 m8 ~9 c3 R" o: K* ]& t
    或者把b但的起点改为1试试。 ...
    " x: m0 L- k) K0 L0 `; p/ R

    ) D( m& z1 _$ A你是对的。
    8 M7 f7 P& Q* y6 O& b' T* b8 S去掉了随机部分- W. L/ i: ^& v3 v5 z+ P
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)( V% U9 J" o5 q" x4 n& l) y
    y = (x*27+15).reshape(-1)/ I# y7 `+ |$ ?: B; s5 s7 u1 T% B+ \

    5 U* P8 u) j# t循环次数加成10倍,就看到 b 收敛了( x4 X) H: {0 m+ |: A3 d4 Y
    w , b' U' v+ h/ _' O% f0 m6 D
    27.002620697021484 14.826167106628418- p6 E$ [/ Y: f0 h" _

    6 V9 M3 G2 U2 L& t和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-2 14:57 , Processed in 0.066491 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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