设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ! p7 I# G! S1 W+ D; \# H) `
    2 j4 h# U$ m4 n
    为预防老年痴呆,时不时学点新东东玩一玩。0 @! N  i# D4 o& @
    Pytorch 下面的代码做最简单的一元线性回归:
    ' p" T5 j7 b9 O1 X7 E----------------------------------------------
    ' `! `7 k2 G) O* s* k8 ?7 dimport torch
    , W: @1 g- T; ]! V! l: n8 Iimport numpy as np
    / x+ a, Q7 q1 S( himport matplotlib.pyplot as plt
    # Z/ W( s$ B8 \. ^5 H) Cimport random2 b( I+ d0 G) {: w! P
    ) I( x3 i) a5 Z/ N6 d8 ]0 v& Y! r- {
    x = torch.tensor(np.arange(1,100,1))6 n9 ?: e$ `: z* a9 ~4 z+ B
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    / O, r; q# @0 \8 A+ Q& l. V; ~5 }+ F; E. a
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    * x% b( ~2 {6 W8 i- b2 nb = torch.tensor(0.,requires_grad=True)1 Y; i7 N' g, T4 b% H' }8 ]
    2 `: w  J: N( Q$ n# s/ _; P* ?* t4 X
    epochs = 100
    6 Q  U  w/ i4 [* G% h
    1 R6 E* c* d3 u' }' V! Olosses = []
    * Q) I3 t2 p; m# Cfor i in range(epochs):
    $ V8 m" c) L! r: e6 e. V( p/ p  y_pred = (x*w+b)    # 预测
    8 Y+ j% g; |+ {  y_pred.reshape(-1)
    ' k' K0 I, f( Y2 Z5 T
    0 J2 ]& e5 Q* y0 _4 z' O  loss = torch.square(y_pred - y).mean()   #计算 loss5 w6 e6 f5 v1 c% Z* {8 R2 i' l
      losses.append(loss)
    8 Z1 X4 f) N2 M# \4 t  t3 L  + M6 w% {2 V# W9 }& ^
      loss.backward() # autograd$ J9 a+ o8 h, z) P
      with torch.no_grad():
    ) j; c( @9 g& I  T: Y    w  -= w.grad*0.0001   # 回归 w( E! X; J! ~! O$ Z2 v
        b  -= b.grad*0.0001    # 回归 b
    ; E  n, a1 K7 `" J  w.grad.zero_()  0 l) y  l# X  u
      b.grad.zero_()7 Z/ J  T7 q- n$ F  o
    4 u: K5 Q' w3 ^; T- ~0 Y
    print(w.item(),b.item()) #结果
    + r1 u( r" v& ^" r1 J( j' `$ s; B/ L
    Output: 27.26387596130371  0.49745178222656251 L5 W  _, g+ H* M  P
    ----------------------------------------------
    3 q& Z) V( S  h! R/ T6 Y9 h最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。( d% G$ ~2 E6 |' e
    高手们帮看看是神马原因?+ a9 t6 o$ @- C( ?8 k& `0 h4 w

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 2 X2 N) ~6 A5 `% i. Q0 o
    $ w  _, Z$ @' K* @4 u' J3 B2 A
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    / j2 Y  t. @9 t# t+ ~2 U-------( V- [! x  t$ P( s& H. x
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。, w- z% k0 i+ p
    -------
    1 p3 l- q3 V$ ]3 E2 e$ P* M3 x0 s算法诊断部分,建议把循环次数改为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:233 i6 J% |& e. `# H* J
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    . J: E  P, x$ f-------* p( T, |! F; q) g0 b; {
    不好意思, ...
    6 f; x* x6 H' u( ^. b! F% Y. G
    谢谢,算法应该没问题,就是最简单的线性回归。. i) d2 e# W3 u* o- @0 I1 N. ~1 g
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    : Q' z" Z# o9 Q2 A
    雷达 发表于 2023-2-14 21:52, C1 g3 n" n* U% [$ P
    谢谢,算法应该没问题,就是最简单的线性回归。7 o1 ~3 q( F& Y5 `
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    4 j& {- F+ ?3 [3 h) U
    " X% l' W8 y" I, K  h刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。# G/ [8 R; B1 \6 e
    3 o6 E2 ^1 U- c% r6 \2 X) i; x
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
      t1 ], p" P4 ^/ N% h
    老福 发表于 2023-2-14 22:004 x5 m: E3 i" H9 Z
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。6 q' U7 y9 n; \( P; q$ P, w
    1 {3 X& R" a8 v- N/ ]$ q& |4 F3 V
    或者把b但的起点改为1试试。 ...
    $ o9 H7 S9 E$ O3 Q8 F) {

    + O4 ^9 \- _0 H5 W  M, V7 l2 F你是对的。% Q4 P8 r* I0 c! Y; u' ~- P
    去掉了随机部分4 i2 I+ p5 h1 _- a- K
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    " |; G" U( u2 a1 v/ ]0 U9 k& Y' S* ly = (x*27+15).reshape(-1)" i  }: e7 M- i

    & [7 y% w1 f1 [6 f循环次数加成10倍,就看到 b 收敛了
    ( ]5 S. u8 l/ [$ f( S9 R8 k" \  Zw , b- Z7 a- F  W  }: m) @& f- m
    27.002620697021484 14.826167106628418) `& q: n3 A" P0 O0 }8 q# e5 O
      w; W) o! [) V- P0 \
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-14 17:35 , Processed in 0.056097 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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