设为首页收藏本站

爱吱声

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    % X" e  Q* E2 i8 f! x8 q
    0 h$ s8 Z$ Z5 o6 z0 [$ f为预防老年痴呆,时不时学点新东东玩一玩。
    6 u& l, L+ r" n- I! ~Pytorch 下面的代码做最简单的一元线性回归:0 S$ B; p6 _2 Z3 R
    ----------------------------------------------7 c8 g) m7 W$ ]
    import torch
    % M* Y# u' [! i' [import numpy as np
    6 y/ M& |, c1 h/ U# J& nimport matplotlib.pyplot as plt; j3 o7 q6 I2 k+ I
    import random7 f& }3 a: ?! t5 G8 M6 \

    ! _0 F) k- e* Nx = torch.tensor(np.arange(1,100,1))
    ; \" H- d6 g; p! yy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    : h4 t& K, @$ c( F# }
    & R- L* {9 y- B/ F# Z' J$ @$ Z1 n/ ew = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    * |4 e7 O/ `) u- pb = torch.tensor(0.,requires_grad=True)8 {6 S: u( g: w7 A$ c
    . x6 k* X! F1 m2 k" {. g2 G
    epochs = 100
    # h4 y1 w  Q! B% D8 z6 _- S8 B) }8 X! h4 w" ?
    losses = []) |- ]0 w2 E* q8 e2 u7 V6 E8 S
    for i in range(epochs):" I" a% ]7 T- X% Q0 u4 K
      y_pred = (x*w+b)    # 预测9 ~4 |; }! U' n3 {2 |
      y_pred.reshape(-1); G& l+ B" o) R& r0 w# Z

    " A/ D3 v, \5 U0 Z  loss = torch.square(y_pred - y).mean()   #计算 loss- v) b% g8 H0 s
      losses.append(loss)! \+ G# x# G9 l4 X
      ! x# o& H7 P) j0 o! i; G. g6 z& R; v
      loss.backward() # autograd
    # A* a- [6 d3 F0 z  with torch.no_grad():
    + f) m! ?: K4 S9 b    w  -= w.grad*0.0001   # 回归 w
    2 K0 q# k7 G* ~& A' n! S    b  -= b.grad*0.0001    # 回归 b 7 e+ V2 ~& ~* p! ~- B
      w.grad.zero_()  & _# o% p- {5 G% h- ^. U
      b.grad.zero_()
      T5 G- e/ C1 k4 w; v$ v6 ^- @  T- i; ^: _
    print(w.item(),b.item()) #结果
    - ?9 c  x$ h- J3 z- |/ g/ y) A3 Q5 K0 M* {% {# k) r
    Output: 27.26387596130371  0.49745178222656250 y4 }( ]0 r  M! h
    ----------------------------------------------
    9 i$ C0 t2 z* z% {7 P1 v# D最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    % g" j4 e) o' \% e) a( E0 [高手们帮看看是神马原因?) y& d8 f1 T3 k& U

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 ) N1 g( g/ |) m' Q0 }! Q# L, A* n
    . ~$ N8 J. J- q8 F* v+ C
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?' x  n, h' K  [8 O! P; A8 w  V
    -------8 D" t( X: \/ l0 `9 L8 \& O
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。4 Q6 r. Z$ l7 X7 t4 S
    -------
    # K& F& x# s/ I# 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:234 x& q4 v& z7 }; g. Z3 R* A
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?2 p* _# ]0 o$ i  X8 m' ^
    -------5 N* L9 e7 w  c" g
    不好意思, ...
    8 {; D8 O4 d. ^4 [
    谢谢,算法应该没问题,就是最简单的线性回归。3 A+ _5 q" }5 p6 ~* S$ k. \; I* ^% A
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 : F* U$ V2 @, L1 y" g8 u" T9 v
    雷达 发表于 2023-2-14 21:52
    0 C. e9 {- K2 C' _( ]4 I. i2 {谢谢,算法应该没问题,就是最简单的线性回归。
    : t6 C/ h6 I2 ?6 U* }我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    ( [8 m2 Y: @- @* v
    ( Z0 `: O  H% {* \* g刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。% N+ h) H" B2 x/ j1 A  B* a2 O
    1 Z: u; V; v3 @4 i4 O  h& F  _
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ; ~+ s2 S6 f5 R. ]' v, p0 d( ?/ v
    老福 发表于 2023-2-14 22:00
    8 @+ C- W, T' S5 W4 x# P* O刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    1 i/ P; o* [+ {; B) n% I# U/ Y: D2 i$ k! b! c
    或者把b但的起点改为1试试。 ...

    & f/ m! b6 q# m$ d. z
    3 q" j/ s8 t! q# n4 s8 |" J" }$ B; m5 f你是对的。+ P, A' T9 j0 F6 Z5 S$ ^" v
    去掉了随机部分7 E* c9 g  S5 p/ X3 `
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    5 T( \1 [6 x1 W5 fy = (x*27+15).reshape(-1)
    2 F# \# z, M+ X  \0 P8 J1 V
    4 t4 ?3 u( h3 M3 E1 g6 `% T6 g" O循环次数加成10倍,就看到 b 收敛了
      n) B5 |3 V+ S; k+ hw , b
    ; k* T7 h% r" h" V* H4 Q- a27.002620697021484 14.826167106628418
    . V7 J: F/ D, n* d* I! \
    4 b6 C' ~3 m, {4 I$ d和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-10-7 12:08 , Processed in 0.069662 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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