设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    4 X, V+ |1 f/ c$ l) R
      U1 W( U" Z8 Y2 g! N3 g' u0 C8 ?为预防老年痴呆,时不时学点新东东玩一玩。3 {8 T4 L1 o" S% p# k
    Pytorch 下面的代码做最简单的一元线性回归:- a' y1 }- B4 `9 h' t* J
    ----------------------------------------------
    # P" f) T1 w3 K4 B0 \0 Nimport torch
    / N) m* g, H! N2 V0 }+ l0 Limport numpy as np+ n8 g& Q7 h' G  \
    import matplotlib.pyplot as plt
    2 N8 s/ f2 D3 g) F0 Gimport random
    4 p: `$ ?2 w# l5 H7 @4 L; O
    4 a0 ~8 X' L5 d" y2 W0 r: |+ cx = torch.tensor(np.arange(1,100,1))* Z, \3 |! ~- g' p+ s& w
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=159 m0 m: I. K7 K6 a. r9 j' K; u& t3 C

    5 y7 c& P) |( A# Zw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    9 p1 p$ u6 D: Ab = torch.tensor(0.,requires_grad=True)
    6 d7 W' E6 ^2 s6 V8 U
    ( b6 M$ b  B4 E; @" l* r, Zepochs = 100
    1 P( p& y# b$ T9 o  M0 C1 t" ?1 ~& b! C4 k( a2 v
    losses = []
    $ X% N# s% i6 c" x! Dfor i in range(epochs):9 h. u) w1 f) o- U' c
      y_pred = (x*w+b)    # 预测. c" _4 i; y# T7 `' w6 X: h
      y_pred.reshape(-1)
    ( `3 E3 R2 C) B
    ! i& E* T  ?9 Y% k  loss = torch.square(y_pred - y).mean()   #计算 loss
    " V) L& t" x% B' X8 D6 N  losses.append(loss)/ P. z% `6 u/ V, T! `5 F, \
      2 c4 ]- |) p3 [! S2 u$ z
      loss.backward() # autograd
    % W) S8 n9 j, `* p) A* k9 t6 T  with torch.no_grad():
    3 U) [) D0 [- W8 o1 m* k    w  -= w.grad*0.0001   # 回归 w
    % \$ C8 |7 _6 Z! ^2 Y+ G    b  -= b.grad*0.0001    # 回归 b
    , a9 f7 W" d- v/ E3 e% i; g  w.grad.zero_()  
    $ u$ a! r7 l* L: K1 H  b.grad.zero_()
    & h5 c0 _2 @4 C) |- o8 h, a. J3 i" t9 |+ }" Z/ `$ l
    print(w.item(),b.item()) #结果) k$ U$ [" R- [1 A

    1 d; |; m4 C4 b5 F8 ~Output: 27.26387596130371  0.49745178222656254 N# H8 _; K$ _# s
    ----------------------------------------------
    - l; G# Y! _/ \最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。7 y8 J3 x+ ^6 q
    高手们帮看看是神马原因?$ M2 A3 d) \/ E0 R! c2 T* T

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    " Y' U9 a' O! Y% i" ?  l* o# W8 F" i/ m) X
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    6 C6 R5 D; O! r9 V( y0 Q-------$ c  U. G; W6 n  F4 O' l! A
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    6 U( j; L& t  p9 `- w4 L: S: c-------
    # S' l+ _2 j- ^* a& b# J& @8 I算法诊断部分,建议把循环次数改为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
    9 R1 w" s+ d1 o; Z5 v没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ! B- Z/ `! n" W% M+ m2 E-------" ?( g; c. q  r) [3 p
    不好意思, ...
    & ?- m5 T# a: n0 H0 V+ a
    谢谢,算法应该没问题,就是最简单的线性回归。
    ) L7 x6 F" X0 H7 B3 b, i6 j5 x我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    % m  M) c5 K7 ^) {9 F
    雷达 发表于 2023-2-14 21:52
    ( f$ V4 O0 J/ ~. E: H- r3 Y谢谢,算法应该没问题,就是最简单的线性回归。
    9 s. p' |4 m$ V% p* o我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    2 J7 ?% z/ w! B) d. c
    : I  t3 W% c3 F4 k5 H, s% K刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ' H) b- O' i, C5 n9 D% S
    & F, d; O7 U$ j( i& s或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 / `  y1 S& ?' t' v
    老福 发表于 2023-2-14 22:00
    / ^1 A" |; k* x" V) X3 z0 M刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。" f: W: N& Y# T# A. K% k% Z# l- |6 W

    $ \% H% u6 {" D& d+ ?或者把b但的起点改为1试试。 ...
    # `' N1 E, y5 x
    0 S$ _+ t/ O) n$ J8 C6 v+ `& L
    你是对的。
    5 S" J4 o# G) c1 M! {去掉了随机部分
    9 T1 w; i/ N: l0 V2 h#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    & p+ `. m+ `- ry = (x*27+15).reshape(-1)( [* b! @1 O  @$ `; c7 H, P
    ! R# y) [7 L- x+ n
    循环次数加成10倍,就看到 b 收敛了2 ]( _% L/ ]4 N. `" A
    w , b7 h+ W* o2 M( y0 d& P3 y" \
    27.002620697021484 14.826167106628418
    " Q% d  ~; L9 K+ \( @  c) C6 h8 A2 K; T' i( p  Q  A3 D! p
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-8-15 03:55 , Processed in 0.058910 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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