设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 # }! r4 q# j2 g. u8 v+ c
    & d6 E+ l1 f& Q
    为预防老年痴呆,时不时学点新东东玩一玩。
    % |; E2 ?$ y  ~3 q/ KPytorch 下面的代码做最简单的一元线性回归:
    - t9 r# f3 V% c, u& w----------------------------------------------! u) k$ Z  U- ?$ g
    import torch
    , O6 [, u  S6 G, y5 l, R: U' u% Z* vimport numpy as np
    / J! f( Z; }% S/ E6 Z/ jimport matplotlib.pyplot as plt
    ! x+ v) y' b6 S" C" Timport random
    6 c" @4 l' Z0 R
    " R4 b8 a, o6 c8 A, h# M8 @4 fx = torch.tensor(np.arange(1,100,1))
    ' ~+ \$ W! @5 S0 A) Ly = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    0 }7 a/ H' w$ F1 v, o% l8 U' S$ Y, ]( T$ H( g, m5 i
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    $ M: a9 n/ s) L( @+ P; Lb = torch.tensor(0.,requires_grad=True)
    * g  i' D$ ?# D' H# ]) J; b. x( n! y& w$ B  V
    epochs = 100
    9 a$ x* f; W2 B7 a7 |& X* u
    ! A* R. K8 ^# flosses = []
    3 R; c0 j/ L) Efor i in range(epochs):
    * V4 b5 `( z0 d5 c  y_pred = (x*w+b)    # 预测
    & P  O+ K7 q; f3 I( {  y_pred.reshape(-1)$ U$ r" I# N9 A+ d4 F

    , a1 A$ V5 d3 ^  loss = torch.square(y_pred - y).mean()   #计算 loss
    1 ^+ G4 f. ]+ I. Q  losses.append(loss)
    ' I6 a  V" W5 w7 ?  
    . U) Z3 r; ~! @' u  loss.backward() # autograd  s0 Q2 @/ y, H9 i1 t0 ?, S7 G
      with torch.no_grad():9 x! |0 ]) C; _7 F4 D  T5 `8 G
        w  -= w.grad*0.0001   # 回归 w& \- ?  |" S8 f. A) \; ]! N9 R0 ~3 c5 g
        b  -= b.grad*0.0001    # 回归 b
    ' x! G) ^$ Q6 j. R  w.grad.zero_()  
    9 }" k* W% R7 _7 B) D1 ?  b.grad.zero_(): B2 c; f  B% O  _2 |: {  ~

    % K' n# Q! p! @8 P& zprint(w.item(),b.item()) #结果2 }/ w) I2 [* d' r: E& w2 |; w3 P, Q
    ) L# y; D# p+ v  e5 c+ V
    Output: 27.26387596130371  0.4974517822265625# C9 Z" u7 T9 B" I2 h  G6 c
    ----------------------------------------------9 d9 d0 n2 U, d7 I! T1 J) S0 K
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。6 @/ `' l! d5 I& Z: o$ C
    高手们帮看看是神马原因?% \. x, b/ |& y7 Q/ @$ V$ J2 B2 d

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ( I5 x* w7 f6 n5 ~) [& R* c9 e

    0 d+ I( \# N2 b没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    1 A9 w7 w' V/ F5 _, e-------
    : @! i* Q; b4 b- A  K/ j不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。+ O9 L$ ~* r; Q/ v  M1 F+ Z. k
    -------3 ~7 E  r- w: |. Q+ S. e: @
    算法诊断部分,建议把循环次数改为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:232 ?0 b8 O0 M( \; _5 F- @
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?9 U% p1 }) R' i# Y" w2 z4 X' e
    -------
    ' \# O" u% u; l6 ]+ n' U5 U1 p不好意思, ...
    7 R. v8 @; }9 q
    谢谢,算法应该没问题,就是最简单的线性回归。
    & X. q5 }2 ?6 B& ?# O( e- U) A我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 : V: _) j0 B0 R5 J" [
    雷达 发表于 2023-2-14 21:526 R9 z9 ?$ l9 U) n# q
    谢谢,算法应该没问题,就是最简单的线性回归。# H/ l- Q% e9 }, N: q2 }
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    " n! J9 q% S  T& J1 M3 F
    1 P; l$ B" V  t9 ?% C4 Y. {
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    / e4 R3 a/ w* ^2 L/ u
    ' B8 s8 p- S' @# j+ J. j' }4 F3 a或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    : a. y8 ^# J/ o& j# U
    老福 发表于 2023-2-14 22:008 x. n) n# T% r0 L$ O
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。5 B6 W2 n0 n: y2 T( }4 J# q5 H" S3 @8 S

    / E$ S! I0 Y5 G$ d! i3 g" r1 }或者把b但的起点改为1试试。 ...

    * o& {4 B& q9 J, d. y1 g# i. P  ^+ m+ W! c
    你是对的。3 _+ T8 h8 M1 [& n" T/ s# x4 S) x
    去掉了随机部分
    + ]$ V% A2 o) H0 K+ S#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    $ m# Z1 H* T. Y. ]8 c9 C& Py = (x*27+15).reshape(-1)
    . [4 _7 x. |& ^- m2 o0 f3 J$ b8 l
    循环次数加成10倍,就看到 b 收敛了
    : _! c' |( W( F) G: f5 Mw , b
    / @- y" I4 i% s4 G0 ^27.002620697021484 14.826167106628418. |2 x3 \$ m& _0 M$ r' J

    % \8 |( l5 a# O/ P和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-26 19:07 , Processed in 0.056854 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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