设为首页收藏本站

爱吱声

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 : T; d: j$ V. W4 i! W8 S  G
      j3 u2 m4 a) z4 ]( N+ T
    为预防老年痴呆,时不时学点新东东玩一玩。- m4 n6 x& p3 K  O
    Pytorch 下面的代码做最简单的一元线性回归:4 \9 \3 z$ @- s0 A
    ----------------------------------------------* U1 h, R' h* E" i# v' L$ q2 {
    import torch
    - q; j; N- P$ V* |- d. Aimport numpy as np
    ) n, Q" S5 W& W( S) ]; U/ Fimport matplotlib.pyplot as plt( b+ l3 n% v+ Y! [
    import random
    ' N4 K8 H- y: U2 h1 C6 ~7 y2 [) O
    # H/ k( m& k* ]1 Hx = torch.tensor(np.arange(1,100,1))
    $ k9 W' H) E) b2 A& p- `y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    ) k1 u# c2 L8 c) u0 T  q
    1 e$ h" x# p9 I9 rw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    8 S; F0 r/ s- R* p  x5 Z5 d5 ?b = torch.tensor(0.,requires_grad=True)" v  F; i4 m: b

    - M/ F; U' k$ ~3 R# I7 D3 }: fepochs = 100
    # b  u# _' D/ N$ {* N1 s9 Y' A6 S2 R5 |9 w) A+ ^" Y2 H' b
    losses = []
    3 ^1 X, a" ~/ xfor i in range(epochs):+ ?/ ?1 ?( Z: J- `0 C* p* }
      y_pred = (x*w+b)    # 预测
    9 w7 z- |; Z2 C/ P  y_pred.reshape(-1)( u9 s. d+ p9 h1 ^
    ! N0 `; W4 K) [7 ]9 n  [: U
      loss = torch.square(y_pred - y).mean()   #计算 loss6 L" N4 i, s) w5 a" d' K: i
      losses.append(loss)' }8 d% M7 x+ \  W7 E1 J
      ) j/ o8 U, i( T+ B- a( f: {
      loss.backward() # autograd$ x: F' N0 v( d, Z
      with torch.no_grad():- B9 @4 j/ Q" C8 x& e7 J
        w  -= w.grad*0.0001   # 回归 w# v  ]  `/ ^$ {0 ~/ d& B+ h/ i
        b  -= b.grad*0.0001    # 回归 b
    : ?* M' J6 G! x8 T: ]6 i  w.grad.zero_()  
    5 V4 [4 j4 u4 k. L4 k  b.grad.zero_()
    ' k6 ?; ~+ L" @- ^! `+ N9 P
    " o$ a! m* o. N8 G6 y9 uprint(w.item(),b.item()) #结果
    6 n. Y( B: |5 ?5 A$ `# ?; o, i4 L# U0 k( H1 J: F/ }1 ~
    Output: 27.26387596130371  0.4974517822265625  F/ \; Q/ B8 r7 h1 D$ g- ~
    ----------------------------------------------' M  E2 D; `: }/ R( i
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。& p9 y7 i- C* }. N# M
    高手们帮看看是神马原因?% M6 w; G: u' J) \( i) {

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    + |* i1 I' n& W3 q+ S3 x. `1 u
    : E+ A. ]- L# k" B没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ; u& X1 a0 M+ b( n# ^3 H-------
    3 t! p2 L, Z1 m" W) E8 }不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。; S1 g4 G! N, B3 x# {6 Z% P
    -------; c9 G, J/ A$ C5 T+ X, f: V3 q; 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
    1 d8 l: F1 l4 P" G没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?6 T% n  \6 U7 v  t, T2 D7 o  ?% z
    -------
    # c/ N  o! z2 ^0 `% ?% T9 E不好意思, ...

    ' Z" `9 ]' E: T6 n谢谢,算法应该没问题,就是最简单的线性回归。" n) {4 g1 \& X& q
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    $ i/ V. x! M" u2 ?" l0 J
    雷达 发表于 2023-2-14 21:52
    6 q, D- h6 H7 P: k) q谢谢,算法应该没问题,就是最简单的线性回归。
    + k* t0 h$ }& o我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    6 G2 a/ v/ j( w4 {- k$ C4 q
    8 y* T+ B: R9 t0 Y) s) u) R$ S刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    2 U. U" x/ j7 n
    % ^8 ^. g" l& i+ R+ L) ^2 `* `或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    & V& d) p  j" g, J
    老福 发表于 2023-2-14 22:00* z0 c1 ~7 `6 m
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。7 m& k! J, R8 d# V) @

    4 X9 N- x4 ]( q6 S7 n' h或者把b但的起点改为1试试。 ...

    , i& w) s; c1 N. f5 N
    # h, G/ m4 M' Y$ t$ q  J; ]% @你是对的。% N$ e* `2 Z4 f' I. X
    去掉了随机部分
    ' v9 v* Q' m6 e#y = (x*27+15+random.randint(-2,3)).reshape(-1)0 a& C9 K0 A  Z$ M
    y = (x*27+15).reshape(-1); o, A' o+ x5 s3 }% x  K
    ) y1 \$ a" h/ z. r
    循环次数加成10倍,就看到 b 收敛了$ Y, S' f6 V: U8 [8 s5 \2 O; F$ Y  Z
    w , b( ~4 y& D  N/ m% C# d
    27.002620697021484 14.826167106628418
    ! U% l% K0 F) L: c0 Z0 A% q; c% y9 ~: T8 v
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-10-1 09:49 , Processed in 0.057458 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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