设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    3 A8 ?2 h% W" R3 e! |$ v( o
    3 k0 x& g( u6 k* U为预防老年痴呆,时不时学点新东东玩一玩。; L2 J5 U- @! A) e2 v
    Pytorch 下面的代码做最简单的一元线性回归:. p9 b7 b( V8 ]
    ----------------------------------------------
    : {7 Q$ B8 Y/ A  _; h+ v/ P; zimport torch; s  R# X1 C) }; E' |" P' {; i8 ^
    import numpy as np
    ; `  r+ N% N" Qimport matplotlib.pyplot as plt0 o* w8 t/ f5 s- l" r- z
    import random( }) y( u8 F( W$ H# z1 z+ X
    * ^. {( X! f1 p" X
    x = torch.tensor(np.arange(1,100,1))
    ( @0 `9 Q+ ]9 I4 U1 q: ^5 Ny = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
      s" G: b  x* J% }: o) |% a* A$ X& _4 R  e4 }
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    : u/ H; ~- z3 C" Y& Zb = torch.tensor(0.,requires_grad=True)" a7 @3 n( [/ X. h" m

    $ X( f; O, X3 I5 V( wepochs = 100
    2 l, V: m, U& x/ ^' V4 W8 L2 Z' z" Z
    ( t* ?& ]' r, K6 ?losses = []
    3 h9 c0 ~6 p3 w5 w2 Kfor i in range(epochs):
    8 i# R/ w* F. o9 w% ~  y_pred = (x*w+b)    # 预测
    6 t1 m7 Z/ S5 s) O: \  y_pred.reshape(-1)
    9 D3 n$ q6 r0 M7 C 4 Y  I; ?6 e6 _, h# E8 e, p
      loss = torch.square(y_pred - y).mean()   #计算 loss- i) a9 w' r7 B- _$ z* S+ m
      losses.append(loss)
    ) f# R' @# |- e8 r% L) `  3 m4 n, Z# ?& O4 c7 n+ L4 @
      loss.backward() # autograd
    - [" U5 a  }  a  f" ^  with torch.no_grad():( x# ]: X9 \, j4 z1 ?% T' X0 `
        w  -= w.grad*0.0001   # 回归 w
    ! Y0 A& \; G$ n" [) j2 |8 t    b  -= b.grad*0.0001    # 回归 b 6 M4 r4 C" y6 w: P4 k
      w.grad.zero_()  
    ! o3 r  R1 V. A- ]) {! ?  b.grad.zero_()
    1 @; {& H. b4 l
    ) i. U3 E( c5 {  c. @3 Tprint(w.item(),b.item()) #结果, ]2 r2 z9 f6 l

    ' Y# c1 U# b6 c& n* j# f  iOutput: 27.26387596130371  0.4974517822265625  F2 x7 E+ [; o
    ----------------------------------------------
    2 P6 ?& |' O/ P  P2 z2 I2 X4 e3 i" ~最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    - ?* t6 o' u/ v5 ?8 d, P高手们帮看看是神马原因?
    # u. z. @; Q9 w* p6 p" f  v

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 6 Q- |! _: Z3 H4 N6 q% D

    7 b" W+ g. }" C/ i7 w6 s! X" @没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    - @  S# U0 ]# ]7 Q5 ~! Q( U-------
    " t9 g7 Y% M/ `5 R6 M* {* A不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。' n$ w. m, b1 U/ \' u& \
    -------* V9 {6 E. m0 \( }3 [
    算法诊断部分,建议把循环次数改为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
    6 P; E9 @4 g( m! q没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?( v* R% x9 U$ l  C5 M; j$ d+ T
    -------
    # X8 u' _+ j  f; o- s5 E不好意思, ...
    3 M# j6 a9 }2 w0 X9 a" {' y- h* I
    谢谢,算法应该没问题,就是最简单的线性回归。# a' j" v1 m5 V8 ~
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    2 X0 L) i) v; v6 _7 D4 k
    雷达 发表于 2023-2-14 21:52
    - c1 U& A$ W# Q1 c, ~) m6 l谢谢,算法应该没问题,就是最简单的线性回归。! c8 A8 t$ E: y  k+ ~9 z  [0 l
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    $ J$ G4 p7 [' ^& s  w2 i
    ' I# u: t9 k( S( c, h刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。. P  ^) k: h5 Z2 U: d7 n
    & e7 c( m" \/ [8 P* E) Z
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 ; ?: J3 x5 [3 ^3 _
    老福 发表于 2023-2-14 22:00
    ! I& n. w) R5 _. }刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。' D7 k6 A4 B9 D) x$ A; M
    - {" ^5 W- T  D  G2 C( d8 p7 C
    或者把b但的起点改为1试试。 ...

    ! |, u! \" ?: q# }) @/ c- d+ f' Q/ K$ s& n
    你是对的。
    2 a+ f7 M; s1 [# H5 R0 k% K% k去掉了随机部分; a; E% f/ ~7 i" z" m: y' c4 g2 K
    #y = (x*27+15+random.randint(-2,3)).reshape(-1): @1 I/ z, f/ g+ U& b
    y = (x*27+15).reshape(-1)6 d  ~# ~4 l, F0 z6 t
    " U6 V  x# q% m8 \( m9 V
    循环次数加成10倍,就看到 b 收敛了
    . M: d, U1 \* R/ i0 [& Uw , b
    * C2 k( }# f. T! @  y3 u1 M8 e+ O27.002620697021484 14.826167106628418
      r, V# v2 W" n3 d1 o, F% G
    & K* T$ V' Z& y  }' H2 I* A, G1 O和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

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

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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