设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 # F5 Z5 _8 q% ~3 O' I6 k

    & A" E9 {6 m: r  @* L为预防老年痴呆,时不时学点新东东玩一玩。, C* f/ \% p2 f7 u
    Pytorch 下面的代码做最简单的一元线性回归:# j, D1 m4 J7 \9 h) t: z3 `4 ]
    ----------------------------------------------$ o  l4 w6 V) C& j
    import torch
    4 ^5 g+ q, d8 ]5 ?: i7 L4 t$ kimport numpy as np: |7 N# v# t' k% ~7 h- H6 r
    import matplotlib.pyplot as plt
    1 ^4 F; i/ f7 ~import random
    " l2 A$ C( q& ?5 O6 w0 ?( }
    & V; V! d/ }% u* c. yx = torch.tensor(np.arange(1,100,1))# T4 L( O. V  u4 f
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15+ ?' X# ?0 i( O4 f3 t- j+ p0 b

    , @- S" X& ]7 j: b/ Dw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ' p9 j, g9 [2 Bb = torch.tensor(0.,requires_grad=True)1 s0 i, _0 H+ p# v( Z

    7 I" D- g2 E8 ~$ Bepochs = 100
    ; ]8 s8 ^2 i' D: O0 w- X. F6 Z9 Q: H0 v+ U+ i5 |
    losses = []$ t9 \. D& Q8 j/ f) Y
    for i in range(epochs):
    7 ?4 _/ l+ ?+ ~$ ^5 j2 W# b! v* v  y_pred = (x*w+b)    # 预测
    * H/ N3 f! P1 |' ?  W5 f  y_pred.reshape(-1)
    9 |6 F" @) H# q  m6 l5 |9 n$ v( H + {% C: V) P3 {* V# j' ^
      loss = torch.square(y_pred - y).mean()   #计算 loss
    0 U3 J7 k! T$ X, o) \8 V. ^+ \  losses.append(loss)5 X' G4 J9 O" M0 X# K1 t4 _: Q& m/ ?
      7 h, y) o* F8 p8 d  |! a! k
      loss.backward() # autograd
    & B. F; m' O) m! [4 q  with torch.no_grad():
    7 B# `6 _# g& L$ p+ M6 _+ A$ W    w  -= w.grad*0.0001   # 回归 w
    2 V, @6 y- A9 i1 F' P- Q    b  -= b.grad*0.0001    # 回归 b
    . W; P$ @5 h! z  w.grad.zero_()  3 k' X2 t# T* |7 a% t; a3 O+ X
      b.grad.zero_()% `# e% H; t$ g9 v: m
    . b8 P9 Z* a# y. X& r& J( m
    print(w.item(),b.item()) #结果
    + ]3 I  r+ Z# ~8 [" h0 p3 s. `
    4 \) f  Z1 v" g( D2 v( F0 Q' pOutput: 27.26387596130371  0.4974517822265625
    - E) M( _9 p0 \, L. Z4 _# t----------------------------------------------
    , ?5 A# m) k5 v2 W, N* x最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。& @! `9 C% A6 h6 G
    高手们帮看看是神马原因?1 a6 y' i9 _2 @1 M! {- ?9 ^

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    " a' l( K- D+ d" L+ E( w/ B) k0 |& h) t1 x* I% }1 u; i
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    / M0 x' a+ K" o+ u6 I: g# @3 p-------' j9 i& {1 O  a7 r$ O. w
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    * S9 H) E- p* A1 r-------
    4 K! n+ \) x- i( ~+ U* 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:23' e# f9 b  ^/ K
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?- e0 p: ~6 Y5 K2 T
    -------
    " M, |6 o, h: \1 |* A8 Y0 x不好意思, ...

    . P: V- C) H% o3 s谢谢,算法应该没问题,就是最简单的线性回归。- T- L) W- x' Q
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ) ^3 k' x  W) y- p2 }
    雷达 发表于 2023-2-14 21:52  W0 K; e. Z0 g$ G7 S
    谢谢,算法应该没问题,就是最简单的线性回归。% M4 m4 S3 p, z3 @5 A
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    8 C8 p# c6 l) D, r& D' s$ i
    . L2 K9 b. s: w# P
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! t# d8 v" X5 \4 m3 M
    . }" u2 A/ ~* b1 ?5 X1 Q4 E7 P$ O9 e
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 + F, ~0 _9 I7 V
    老福 发表于 2023-2-14 22:00% r' M1 j; @& w! s0 z' y) M/ ^
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    7 E2 o- W  o/ o' Z2 @9 Y& `' y- W  U5 g% z. ?3 q# S3 A+ D$ ?3 [' `3 B
    或者把b但的起点改为1试试。 ...

    % z; {9 |8 `2 }4 B7 M; x5 I2 ~5 t9 Q# [1 S2 J, Q; D) d. o
    你是对的。
    6 X* c8 }9 Q0 M7 A/ T- e* n1 p; b去掉了随机部分
    7 Y; w  N7 |( Z; a1 Y, v4 |#y = (x*27+15+random.randint(-2,3)).reshape(-1)8 f8 G$ b5 s' r0 i% P0 T! n
    y = (x*27+15).reshape(-1)
    ' \& t4 b, T' D" ?
    5 n, x. n) o5 y% ]循环次数加成10倍,就看到 b 收敛了
    ) R* B1 {! c" Q( T' kw , b
    ' d' v8 D/ D; T8 L# [% g8 g$ j  F/ \27.002620697021484 14.826167106628418
    ; G) S  p% h' U: x; G( n! Q) g( p7 P
      D7 ]- X5 j* ?# @9 U+ U3 u和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-14 18:49 , Processed in 0.059599 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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