设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
      C0 w9 A  V# Q/ z5 Z; n
    % R! J3 w) G( P* j( p' @' n为预防老年痴呆,时不时学点新东东玩一玩。8 a, e: i6 s; U& H; s8 l7 b6 A
    Pytorch 下面的代码做最简单的一元线性回归:* ^% T6 D" }4 ^+ d' w
    ----------------------------------------------
    1 w5 D& y( A2 n/ F8 dimport torch
    + W3 M) k& b- v5 f- pimport numpy as np  a6 y$ J- u$ Z! d/ g# W
    import matplotlib.pyplot as plt8 \' x) ?- v; z7 N7 h" l) K# [! h7 P
    import random
      @' h7 ~1 G+ i  k$ j: f. E% X' [& e' r# w7 S% V6 d* r9 f2 J0 J
    x = torch.tensor(np.arange(1,100,1))* {8 b9 v. _7 b# Z& |: p
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    7 o' d) M( F7 b: U: o2 B# |. F. S3 Y$ \. d+ {" x
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b1 N& V9 S. d: u; V& a. f
    b = torch.tensor(0.,requires_grad=True)
    2 a7 H" C6 {# ?3 N0 p
    4 I- U5 v( v/ r, H( O) zepochs = 100/ W7 }& ]) `9 o4 H. G( }
    ; Y% ^& Z# {7 w' O+ l. b0 C
    losses = []5 W: T$ b/ Q/ k; i! a$ h
    for i in range(epochs):
    8 U0 x5 S7 \3 i7 B- o3 N6 k5 n# L  y_pred = (x*w+b)    # 预测
    1 i5 A% M5 Y, m0 J2 v& W  R  y_pred.reshape(-1)+ D/ ?; ^- o) r7 E

    4 ], p& @4 o3 L# T* D+ }" b) R  loss = torch.square(y_pred - y).mean()   #计算 loss% R  r4 [" B) l* {
      losses.append(loss)
    * {, N7 T6 ~! l5 M( e6 _7 m  
    0 n9 \4 }* e5 x1 S  loss.backward() # autograd3 R! `; d" |! c- E
      with torch.no_grad():
    # ~0 \: a; C' q( I    w  -= w.grad*0.0001   # 回归 w
    9 P* ~9 B! l7 K" S% f' v    b  -= b.grad*0.0001    # 回归 b * u* e9 x/ p. S* f1 F- W
      w.grad.zero_()  
    . k- I& O! A) G& ~1 b* T1 s  b.grad.zero_()
    4 O+ @3 G7 {  |& {  }- x7 l& p8 `. O2 }
    print(w.item(),b.item()) #结果3 c9 s3 }: U- P3 y) U
    . h2 f2 ~* h* d& D3 Z0 q
    Output: 27.26387596130371  0.4974517822265625/ s% _3 L7 H6 O: ?+ S% X3 o
    ----------------------------------------------2 a5 d' t2 l; x
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    2 A+ k( T6 S6 m高手们帮看看是神马原因?
    9 W) I7 Z2 k) F0 _* e

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    . Z1 d. i3 ]5 l$ i8 p# T& a) \! p* k0 w2 B( _- e$ e6 C5 S9 L
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ) H5 d/ Y; b4 [8 U) y-------) M8 B8 t9 i* t/ }; F& i. P% r
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    . _; w3 x' y. T; A/ R3 x/ L* ~+ x-------
    . v+ _5 Q0 u& X( F算法诊断部分,建议把循环次数改为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
    0 B; j3 J- L% d: P" V& \: m) l没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    # O3 e6 a. i) f-------
    ( D- `( H) }, O) V* @9 Y. J不好意思, ...

    ; s- g6 ^# r$ \' d$ h0 \谢谢,算法应该没问题,就是最简单的线性回归。; ~5 H7 A. p0 p
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    # U" w* B! k$ }& H  B
    雷达 发表于 2023-2-14 21:52% @: D3 L  _9 X+ j" y
    谢谢,算法应该没问题,就是最简单的线性回归。
    " `* H  A+ G$ |. z我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    " y( I/ n4 e  v) W% `( p4 ^
    $ n7 E( f8 d2 z( C+ z刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。9 D0 |: Y# k( O5 l7 U1 F- s

    7 m. b: a" G% u0 W4 S+ K+ |或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    ! k$ P7 F4 l1 G% q
    老福 发表于 2023-2-14 22:00+ o' O) \. b* h( o7 _3 k9 E
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! R) C  v; ^" E- o' E$ l
    5 ^6 G: n* q. t0 l( z
    或者把b但的起点改为1试试。 ...

    7 B( p* d- l5 N3 S! U4 @
    3 [4 P% K& r6 z# C你是对的。
      g( L7 ~5 A4 ^% L去掉了随机部分; S; Q$ I1 [( h( l8 w
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)2 Z. k& m4 X0 g: \: e/ R2 B" k
    y = (x*27+15).reshape(-1)8 a5 K9 h; U7 I

    2 u! n5 u, A5 o' n" J循环次数加成10倍,就看到 b 收敛了
    ; E1 Q" F9 z1 w( Jw , b5 K. X, Z  b' l2 \, F) W" N
    27.002620697021484 14.8261671066284183 j3 w# K' Z1 q1 N6 e

    ' b7 n/ J, z# |+ R: \7 @和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-9 13:49 , Processed in 0.059774 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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