设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    ) Z9 W! z& f! _$ Q. o7 L, G) e- u; |; I6 C8 ~
    为预防老年痴呆,时不时学点新东东玩一玩。
    9 V7 w5 w4 h& w  _8 nPytorch 下面的代码做最简单的一元线性回归:1 L" \' T: y$ u- u0 H+ o9 I
    ----------------------------------------------
    & ?; |1 L" F" ~, R9 l: f- W- timport torch
    # ]4 U* n! s8 S6 |& P% gimport numpy as np- {; V/ Q& t* i* p- S1 |
    import matplotlib.pyplot as plt0 a" s0 E$ }0 B% B6 I7 e6 ^
    import random! X, ?+ k. U" U& Y  N( j
    ( B) C" n. N6 a! t3 {5 s
    x = torch.tensor(np.arange(1,100,1))$ H5 G% X, D0 b5 Z( z
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=152 J) ]( M! Z2 D: U7 R1 u5 r# p

    * \! F* `# e! q  t9 h2 Sw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    . ?: F3 N( @8 S4 l' _b = torch.tensor(0.,requires_grad=True)
    6 c' P% c; u  M2 d- I% `, t- {* `& [3 \8 o8 l3 s2 I% {, ?
    epochs = 100
    + V1 u7 B) t" G7 @/ Z& ~- n# [: e# j/ t/ v" J/ Q) m! o: c+ _9 q
    losses = []
    * Q' g  R1 q  N' g3 X7 Mfor i in range(epochs):. Y  J$ H* f; G' U
      y_pred = (x*w+b)    # 预测
    " n0 u" R& C( L1 B8 y# Y  y_pred.reshape(-1): b' o* F8 ]+ T* H( H

    9 M! T. g( R$ N5 D) v5 K" [5 ^  {: k  loss = torch.square(y_pred - y).mean()   #计算 loss
    0 ]' P3 b# B6 f; f: k! [* {  losses.append(loss)
    1 ^9 c8 x1 o# {6 X, G3 Q' }  % t2 J. w. D( c+ ^4 h# N
      loss.backward() # autograd
    6 P$ R, r' l( j/ P  with torch.no_grad():' R  p1 k1 q/ u5 ^* N
        w  -= w.grad*0.0001   # 回归 w
    : M% O1 U$ a) x7 O6 G4 ]    b  -= b.grad*0.0001    # 回归 b
    4 {) V5 A& m2 u5 l. h/ ]2 l  w.grad.zero_()  
    8 Y8 K" p8 C/ I+ ?* ]  b.grad.zero_()( d2 e$ X& T, @8 j6 O2 }5 _$ `. e
    - c+ ?8 q7 Z6 d5 u$ U* C6 m. k
    print(w.item(),b.item()) #结果% ?; U8 z0 B1 J' f' b+ }$ _; u
    " ]+ Q, ~/ a3 K: ]
    Output: 27.26387596130371  0.4974517822265625
    / y+ w+ ~; ]2 s. ?4 O+ T----------------------------------------------: ]: v) w* y/ H
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。3 Y$ O7 |9 K, t5 {
    高手们帮看看是神马原因?  {$ K& Z' G4 J* x. M1 G

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    5 J6 z4 b+ O2 R: O" ~: |' _
    & u! w+ P2 a8 B' m9 Q没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    9 C7 H$ C$ l5 n: P3 R9 f' P! s-------
    : q, ~) @; Y, f不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。6 G5 [' h$ _* z7 ^' o) ^( K
    -------
    & T% _/ o+ @& V( D算法诊断部分,建议把循环次数改为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
    ( w# W$ P9 a" q- v没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?, X. J7 `9 h  k5 Z+ M- b% |
    -------
    : P' h8 }) z: V% K. r. @+ S4 g不好意思, ...

    ' d% f( f8 `/ J* V; x3 {. b# ?谢谢,算法应该没问题,就是最简单的线性回归。
    2 b1 t. m' e; K( P  Q9 h% M4 E我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 / O  R# L8 ~, J# v) k
    雷达 发表于 2023-2-14 21:52! v5 p8 h, G4 Q& e! A' E
    谢谢,算法应该没问题,就是最简单的线性回归。
    % u# [5 Z8 \) o) g5 G. C我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    + r: B, O  U. B8 m; Z' w
    * R7 o' c8 P* I. V; a, s
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ) z9 ?0 h2 ]8 `  M1 N% G1 k. M6 B2 m
    - ~9 k/ o) p" o* [或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 % v% O% s2 a+ P7 ?. s% N
    老福 发表于 2023-2-14 22:008 l0 ]2 J6 C& N1 P: ?
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    8 Q' m6 P' k' w7 V
    ( K" Y! i: Q; Y% M2 Z0 A或者把b但的起点改为1试试。 ...
    6 z& [/ x3 R; R7 i1 y, H; \: k7 \9 ]
    6 O# C- ]6 `' G+ U$ ]0 ?4 ~: m% O
    你是对的。4 A0 i+ k0 x, t
    去掉了随机部分  m, m, Y$ M% o% @
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    + V6 Q& T, ?" l2 Wy = (x*27+15).reshape(-1)
    ; G. e( L- H, |
    ( t) w3 E/ ]+ A4 O% N' Q. q循环次数加成10倍,就看到 b 收敛了
    - d6 q% h8 V+ u" @' R$ |$ zw , b
    3 b" W# y' @3 l  o. G27.002620697021484 14.826167106628418$ |8 z0 _! ]  x

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

    使用道具 举报

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

    GMT+8, 2025-11-16 02:56 , Processed in 0.031195 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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