设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 8 ]7 o2 s/ C9 t, O; V2 N

    7 a. O4 O  z% S5 L' E为预防老年痴呆,时不时学点新东东玩一玩。
    ( `' @! Q1 a0 DPytorch 下面的代码做最简单的一元线性回归:
    : @0 [: c( b' w& {+ D9 D5 |' {2 y----------------------------------------------
      S) y3 G& q. z* S+ F3 k- d' Rimport torch% u1 v7 r: X# ]' Z  ]
    import numpy as np
    / y5 v9 M- X, L3 V- H, \& L! Gimport matplotlib.pyplot as plt
    1 A1 h) D3 R$ i, p' |; m* ~! L' A- Mimport random
    * B# d8 I9 h3 h' J! U; z
    3 l) m  z8 `# s- Tx = torch.tensor(np.arange(1,100,1))  `' E' k: ~; K! j1 b+ o' Z
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15  q3 A. G5 P) M, {( g
    ! U5 \+ Q4 g- C+ ~: c- Y; o
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    $ k1 b2 ~# i) Kb = torch.tensor(0.,requires_grad=True)6 G# C& I6 ^! p* N. F
    9 t" C1 X* Y$ W) w, H3 l. M7 E1 B
    epochs = 100
    % z; D1 j# T2 M, _* y/ m$ h1 E
    & b5 G- M3 B( M3 [& M) o1 |0 D! Wlosses = []! W+ `) B% q3 A  q7 D. ~
    for i in range(epochs):2 c- z0 j: e2 i9 n+ u" |# a
      y_pred = (x*w+b)    # 预测# h, D  X2 D7 e. ~/ e+ N. c
      y_pred.reshape(-1)  d( B& H/ t2 H! v5 j/ a

    7 V& B! U- p  d* F  loss = torch.square(y_pred - y).mean()   #计算 loss
    ) X9 d+ g3 B" x5 e  losses.append(loss)
    + B; E0 S4 y8 R1 r' _- y  4 H4 M2 |% g0 \8 r5 P* O
      loss.backward() # autograd4 K5 z) |+ S' ]) v9 N/ ^- k6 g- S
      with torch.no_grad():
    # U- `# A6 z. c+ a; `    w  -= w.grad*0.0001   # 回归 w3 X% y# h; L. W; ~
        b  -= b.grad*0.0001    # 回归 b : U# Q* W0 s: A( ?  o3 [% y
      w.grad.zero_()  : }/ s# R2 |4 y) P7 w: ?
      b.grad.zero_()
    8 Q6 U8 P! A8 p0 N5 b& O' A0 }/ |0 H, X! A( J
    print(w.item(),b.item()) #结果
    / k  F" ]3 X6 V: a/ x% ~# k' w4 o& T! B3 t1 f. D& ?' r
    Output: 27.26387596130371  0.4974517822265625
    & g- ?8 B6 C3 z7 L' _----------------------------------------------
    , `* E( j& H& @4 e. F/ K最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    , l4 e7 z" K/ g" w2 a, `. H5 d4 U高手们帮看看是神马原因?
    , I; L6 G  I. c5 D; |/ m6 e" Y

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 8 j7 F. J& x4 `; ^' U& i; A

    8 [7 R. {: }3 H8 f, }& [没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    / k2 [& V8 A' [8 e# y9 @  e! g-------, X9 z0 p' M9 ^8 Q, H' z
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。5 C4 R2 }/ t( P2 z( t4 I2 S
    -------
    # B4 w3 M5 a. w) B算法诊断部分,建议把循环次数改为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 X6 k1 c# I5 q6 [, Q; F) F6 c0 Y没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?+ b+ m" L) l$ Q% r/ S
    -------
    9 A( c6 \3 ]1 \; O, k8 \不好意思, ...

    6 Q/ Z" P- i# L0 `" H; A! C谢谢,算法应该没问题,就是最简单的线性回归。
    , V/ c; t  z4 I# u; s) m# o; s# \我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 : _0 r. G% J1 {: Z  y- l4 V/ f& [
    雷达 发表于 2023-2-14 21:527 ]  h$ u- W; A" q. n" ]
    谢谢,算法应该没问题,就是最简单的线性回归。
      y8 B6 P8 Y+ W  `我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    8 l7 P0 |! G' {1 C
    " \$ `/ b. K3 l- [3 R& b刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    4 i1 [0 V$ ^+ i' H
    : c! h5 h" L4 y) v  o2 j( T% k) N% v或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 2 E- \3 c* G/ V- F) ~
    老福 发表于 2023-2-14 22:00  X, q5 p3 h* H+ \3 i: v, Q
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    8 ?, t2 o/ r! i2 f- n; U7 S9 K6 ~) O8 X
    或者把b但的起点改为1试试。 ...

      @) A2 n' }* u4 ~2 g  g( e* `# `4 i- ^3 ^5 k
    你是对的。; B  K2 n4 w# a7 R) y9 X  a
    去掉了随机部分; A! k% F) F2 o9 K) X3 l
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)) f3 d& D7 i, Q- T' q8 v
    y = (x*27+15).reshape(-1)& r5 O( }9 f# A1 g' a5 K! S& c

    . z$ F+ R1 v2 R* A, b7 c循环次数加成10倍,就看到 b 收敛了7 q, |4 T/ z5 H* V" e+ W0 y+ l
    w , b" S4 _9 e/ k) K( M( Z9 l
    27.002620697021484 14.826167106628418
    $ x2 {/ y: g% o7 |0 M7 q2 g9 l' Y% ^
    * h2 h5 ^) G2 N- E: {: w- V和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-9 01:42 , Processed in 0.061264 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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