设为首页收藏本站

爱吱声

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

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

[复制链接]
  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 & u5 d* |( M3 _5 L2 H

    2 L, L8 R- q/ }4 {. F6 V$ M. K' M5 O为预防老年痴呆,时不时学点新东东玩一玩。) y* `! T. d/ r
    Pytorch 下面的代码做最简单的一元线性回归:
    ; \- h5 H7 X# _$ v& V0 {( N----------------------------------------------, V5 E7 @) d1 y# ^
    import torch
    8 u+ n& r" h- b' V8 _4 z4 Z8 @import numpy as np
    9 \/ V: C+ @$ f3 gimport matplotlib.pyplot as plt! W% j1 T, X, T7 r/ X- a
    import random3 b; j, Z) }% e( |9 P" w
    , [. d0 [* g% z
    x = torch.tensor(np.arange(1,100,1))
    & _& {8 _9 g. G  m! k4 gy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    + G: i; `( W0 v; P7 \
    5 k' p$ E. K5 ^" ?& O/ E; mw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b6 I/ z0 F$ ]  \& h4 O8 r
    b = torch.tensor(0.,requires_grad=True)
      A6 H! w: k4 [6 O* B8 i* @* ~& o7 P. K/ i/ q
    epochs = 100  Z: [! e5 A) O' u9 |

    ( v! Z) n0 i+ P1 O; F- llosses = []
    * |% [1 D1 }7 l. }for i in range(epochs):6 y9 x0 t  k: e! l( R
      y_pred = (x*w+b)    # 预测: k/ J( x" B7 {; R+ L/ }
      y_pred.reshape(-1)
    , j& S' G7 U- K. x% T' w  f 4 l+ Q) s0 v  L
      loss = torch.square(y_pred - y).mean()   #计算 loss
    7 T9 S# ^) u" U1 W7 Z. a' T- v( `  losses.append(loss)" H/ n6 P7 a1 Y6 o( U& S2 y! U
      
    , o5 P' w6 W1 T) m! i2 F4 y  loss.backward() # autograd. i$ K3 ^$ @3 x. a1 N$ }% [
      with torch.no_grad():
    2 c& T4 A; S+ I5 R) V' j    w  -= w.grad*0.0001   # 回归 w
    : t/ o+ X3 O7 H' _5 k/ `. k    b  -= b.grad*0.0001    # 回归 b
    9 @8 c: L* y2 e! e, G  w.grad.zero_()  , w, ^' `: a& W5 C, P  ^
      b.grad.zero_()  \7 F% @6 e8 ?$ d

    % O. \) u+ O) }: bprint(w.item(),b.item()) #结果
    ' M  Y. z; Q" P& O5 ]% F, {: t& |5 h3 o( g' \: Z
    Output: 27.26387596130371  0.4974517822265625
    + b  X: E0 ^: w3 v/ t----------------------------------------------
    ! p" l6 d! d- j  H( _最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    4 P1 f+ S" m$ ^* _" X高手们帮看看是神马原因?
    9 e7 n$ x" O" \2 c4 h

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    7 r8 }) f+ O6 ]5 m. O7 ?* [; }4 l# c$ Z/ E" Q7 r
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?3 m8 u: P& X) _; F7 M6 V& l
    -------2 y; u$ X) ~" b" X2 d
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    2 `3 b4 Q3 N7 D-------5 }; B9 d) b. c! Q! ]1 y
    算法诊断部分,建议把循环次数改为1000, 再看看loss是不是收敛。有点怀疑你循环次数不够,因为你起点是0, 步长很小。只是直观建议。

    评分

    参与人数 1爱元 +10 收起 理由
    雷达 + 10 谢谢建议

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    板凳
     楼主| 发表于 2023-2-14 21:52:57 | 只看该作者
    老福 发表于 2023-2-14 19:23
    1 B3 ]; z* h6 t: H5 v! I+ u- v( |没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?" M( V6 T  p0 x1 n! e* o4 r
    -------. M. i: ~/ b- D& S8 v8 n7 @
    不好意思, ...

    & q3 O$ v: O9 C- {* z' ~谢谢,算法应该没问题,就是最简单的线性回归。
    " x) q5 p8 s# z我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    7 N6 {1 S: g9 i1 |
    雷达 发表于 2023-2-14 21:527 x1 q: T" Q5 N1 b& ^- [+ ^
    谢谢,算法应该没问题,就是最简单的线性回归。4 c( r) B& e7 w7 x2 P) `
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    8 t, C* T- ~# v- J
    0 V. c) [# \: d- f  R
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    : R  q; b: d( F1 n  x4 z8 K" R. J. _+ q
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-25 23:22
  • 签到天数: 1182 天

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 % _3 t& n3 c0 r% L, C4 ]" m  U
    老福 发表于 2023-2-14 22:004 O+ k, d, X) d* u6 d
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。: h( |4 _- o" c
    9 G( `& `5 C$ T" z2 e* H, y
    或者把b但的起点改为1试试。 ...
    " H6 I1 k0 I6 S' j" g4 L; n- }# _
    : u. n- |: v9 [9 _* v
    你是对的。
    ) m4 w  D) X8 B4 y; p) o# ^3 A8 i去掉了随机部分
    . C8 o- }% P0 U( o& S1 K#y = (x*27+15+random.randint(-2,3)).reshape(-1)9 F9 |. M7 R. B; B4 C
    y = (x*27+15).reshape(-1)0 b3 m7 _- w) \: ?

      e0 }) S) a. ?; R" e, h$ c4 }循环次数加成10倍,就看到 b 收敛了
    # I; D* E, T! }" X* vw , b
    / x$ c' C) i, \. d2 s5 h$ v27.002620697021484 14.826167106628418
    , |! c9 W. J1 l8 ~
    ! ~( ^! |; o& x2 @7 U# g9 V7 b: D和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-7-10 23:20 , Processed in 0.034001 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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