设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ; l# w; n# d" a6 q* X
    ' k3 G1 n. T$ u8 i# n7 w. |  _
    为预防老年痴呆,时不时学点新东东玩一玩。
    . _! D% y0 C# nPytorch 下面的代码做最简单的一元线性回归:
    / A) M4 k  ~/ s8 ?; l4 T----------------------------------------------$ I' x& y, g) U* k+ G; ~6 ]: U
    import torch
    ) l4 _4 q& [6 E+ v: v3 |import numpy as np2 F! _9 }0 @- x' G3 `% `: S& S! S
    import matplotlib.pyplot as plt
    $ G- V; C' g: e, u( pimport random5 ?8 x+ o" F9 a- x& `/ Z
    3 U) ~* W5 \( P1 `, R  x
    x = torch.tensor(np.arange(1,100,1))$ |) w' u( M' V  b. l; E
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    ; v; ^8 i* ?1 D6 T4 B& u5 L8 X1 Z: B9 V0 g+ H9 @5 U
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b6 _" b* G; O* Z" Z
    b = torch.tensor(0.,requires_grad=True): x) D1 r9 r3 ?# s- U# t

    4 c) k$ V) _! f( h6 q; D, {epochs = 1000 ^+ l# b/ q& w% Z. _4 S
    ' L+ P% S* x0 f; e& l$ s
    losses = []
    5 m( o/ \0 t" B! Q+ {, U3 |, _8 dfor i in range(epochs):) b  g- E2 ]$ h) j8 e# Z
      y_pred = (x*w+b)    # 预测
      ]% W3 y8 h: G; M& s4 N& V  y_pred.reshape(-1)
    . L. g) q. q; j1 d " ^- |$ ~  S/ z, c* ]9 Y. v( h
      loss = torch.square(y_pred - y).mean()   #计算 loss
    ! @# y8 O6 ?! G' i! j2 C5 v. I  losses.append(loss)' c7 x9 G$ A' m3 Y8 V2 d" l: `
      + V* m6 x; w+ z) L
      loss.backward() # autograd
    7 e6 i  F6 x* c9 Q1 q+ j/ h1 W  with torch.no_grad():
    + K, G7 R2 }5 |    w  -= w.grad*0.0001   # 回归 w
    - L5 E  h0 ~) |0 V+ y    b  -= b.grad*0.0001    # 回归 b 5 q. v  Q8 d  j; }5 e% S0 ^
      w.grad.zero_()  
    ; e0 g. C: ^- s( K. s" y  b.grad.zero_()
    9 f& `7 u: b: H3 \: f4 q  T$ C0 ^8 T' r+ V
    print(w.item(),b.item()) #结果3 a3 X+ ?2 f0 V

    : d8 T' K5 P" a! g  wOutput: 27.26387596130371  0.4974517822265625% C8 s1 _, d5 c  m% A  y+ U
    ----------------------------------------------" q4 {: d% {0 O) t; l* Y
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    * I: G5 _: r; v2 E8 N4 d# `高手们帮看看是神马原因?) g3 I0 x" j8 j- h6 L; b, _! z# U

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    . s9 w) s8 v- }8 e% L& E
    ! h( v* ]% j; M8 G$ g: W没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    , N. G% r! r2 S% w( R-------  K; b0 S5 q9 L1 \( r) J. ?
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    5 [5 H# i- Z2 Y- Z4 }-------
    0 Q: g# ]: D% s; Q, v算法诊断部分,建议把循环次数改为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/ ?+ T' M- O6 ^, A, v
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    3 a* g& `; I( u9 x; _( `  `4 g( O-------
    ) B2 r& _+ T6 z& v+ Y不好意思, ...

    # z7 n+ Y( H1 ]' s+ S0 P谢谢,算法应该没问题,就是最简单的线性回归。4 ~( d! j1 O  p1 c+ A6 B8 W
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 + L% V) g5 k4 @0 i# [3 ~# P3 e
    雷达 发表于 2023-2-14 21:52
    9 \7 p, T' V, f# v$ ^9 `/ g' A6 r: h& j谢谢,算法应该没问题,就是最简单的线性回归。
    0 l$ K* ~& a: e7 Q1 p我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    4 j4 K! I$ O7 k% @2 p5 Y/ [0 U. i
    9 w" U" W6 Z, [3 Z' g3 Q1 Y
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    8 w. y' e! K! n1 o$ X$ ~- V/ L" J
    9 u$ t" Q/ ?. c6 k! W( I或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    怒
    2025-9-22 22:19
  • 签到天数: 1183 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    : W! O& o. o- E' i4 x0 b
    老福 发表于 2023-2-14 22:00+ U# s& j/ R$ q' U) b1 Z- z( T% D
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    9 A- v4 _$ n! V+ \( s, u6 t6 ~
    4 P  d! H5 M& w8 [! ?或者把b但的起点改为1试试。 ...

    3 [& Y" {5 X) M! i) M5 X7 N1 @
    & {9 H3 g. q5 y5 h& B8 Y; D! H: V你是对的。5 A/ R( A8 C( N: ?
    去掉了随机部分' K( P9 E; o3 j
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)  Y( t  u2 P  U  A
    y = (x*27+15).reshape(-1)
    + ~" L0 I6 E9 @4 W( u" o! ^
    0 ^6 n0 d' Y( I& _7 b6 l. r循环次数加成10倍,就看到 b 收敛了& O7 Q/ s0 ^4 [6 n2 f: ]
    w , b
    ; P9 @- O" H1 f, Y27.002620697021484 14.826167106628418$ B& A% K) C! ?( r2 [2 V

    , G& @+ @" I7 F+ x和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-10-13 09:01 , Processed in 0.066976 second(s), 17 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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