设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 2 o/ R( B: t, i6 t
    ; I" `  n9 h" T- |6 E# e. L4 N$ a2 m
    为预防老年痴呆,时不时学点新东东玩一玩。
    2 a5 f, X9 T# A; w- VPytorch 下面的代码做最简单的一元线性回归:+ O# F5 C9 u! F; r
    ----------------------------------------------
    5 R1 l  a# b' o- \: y: Rimport torch
    % m$ ~. W& z( H& @2 u  O/ Vimport numpy as np
    1 |: O1 M# Q$ G5 Z" i2 K8 b3 `$ Y, W6 Himport matplotlib.pyplot as plt3 d! I, w6 h- a9 A' L+ H$ {, Q
    import random5 [) z1 z- ?4 K' M/ a& d

    " P, ?6 k3 ]; J' E3 Bx = torch.tensor(np.arange(1,100,1))5 @$ p( x  D9 w- t& o. o: T
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    6 s) g/ H$ M" a6 F8 y$ _" f8 p, U
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    : p- m& K, ~6 x1 Q& e) P7 _% T; ~b = torch.tensor(0.,requires_grad=True)
    . r  E4 W' [0 @1 I/ U( y1 h; C! g$ Z9 C& ^( Q: T/ E. {
    epochs = 100) T) j/ \( o; @& q" z/ d
    7 D" n# a) K$ p
    losses = []$ V2 C- Z4 F* W6 p
    for i in range(epochs):* U: h: X! `/ \, I
      y_pred = (x*w+b)    # 预测
    + l& H$ J# w6 \1 v  y_pred.reshape(-1). T, Q- Q5 k- }& w

    5 @7 U' E2 F' Y3 J. j( z; J  loss = torch.square(y_pred - y).mean()   #计算 loss
    5 l# \" V$ t4 Y# B. \  losses.append(loss)* L( n! A& n, u% k- }: B
      + e& c- X4 N8 N
      loss.backward() # autograd
    + J8 x5 {" C% }! T4 U' x4 X  with torch.no_grad():# C* j+ T/ V8 l; e8 P8 V' ?; p. Y. z! z
        w  -= w.grad*0.0001   # 回归 w2 r0 c  U) a, O  @" _9 x
        b  -= b.grad*0.0001    # 回归 b 6 I6 n2 L& g5 z  G. Q& t
      w.grad.zero_()  ) A$ d7 ]1 g* |3 f9 I& I+ D0 n
      b.grad.zero_()# A$ k& \: B7 E* U% R5 b; c* E! X
    0 v# A1 Z( n( `
    print(w.item(),b.item()) #结果
    ; E5 Q! n8 o' `# l# P& V+ O" j
    7 C* H. M% B: f0 a9 T$ v# W6 c8 oOutput: 27.26387596130371  0.4974517822265625
    5 O4 M" t* @& t----------------------------------------------
    & ], [  Q& n, W; J- T最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。0 ?  P  x2 q/ {
    高手们帮看看是神马原因?0 M- O8 h/ T/ l5 W4 K* C

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    + Z" z) k. X" H6 ?* j5 P4 v* \  |) w2 N! z5 x8 S8 j" A
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' O9 L9 w/ |% G  P2 z( X-------5 c% Y$ _0 W* s6 ?0 [* I
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。+ Z. k$ ?( b0 V' X  h
    -------3 F6 R7 t6 V+ Y
    算法诊断部分,建议把循环次数改为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
    # R) T4 U/ y3 x( [# \) Z没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    9 `2 D  L$ o$ j5 K9 ]-------
      M$ J) y! I' O- S) s. T% W9 O不好意思, ...
    3 j- }" R: ~* [; i4 N+ K- U- O* A
    谢谢,算法应该没问题,就是最简单的线性回归。
    ' s: ^' N/ U, O我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 9 y  k0 ~! a4 M3 f  g; m$ N  `
    雷达 发表于 2023-2-14 21:52
    $ u. p/ p( W% e4 D: t$ F谢谢,算法应该没问题,就是最简单的线性回归。% X% C; @/ U4 y  w% I' Z( A# j% Z
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    , m$ ^7 m1 X& T/ P9 }# s
    ( o. b& S2 Y9 {2 {# g刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    2 v* D, U  W- r3 `- A0 {. J" ~: J/ z3 [5 j
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    4 Z% x$ |- S" [% X, ~8 l$ l6 L
    老福 发表于 2023-2-14 22:00
    ! |& l8 Q3 K% |3 T刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    + z3 B+ C: x/ W" s  F; z6 B) \) Q
    " M8 K9 R; `$ {7 A或者把b但的起点改为1试试。 ...

    & m* z- E! n) a5 V. |
    - ^" Z- n) g) d5 D) L你是对的。
    6 n1 H* B  H* M2 a7 `5 t$ F  k去掉了随机部分: a& ~) k! G% R, p
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    6 S7 U0 G% K6 J. i7 E8 By = (x*27+15).reshape(-1)5 [6 D5 w7 M# a3 M3 y' l# {$ V1 N

    5 V3 x3 _+ K: ^6 j. |, S循环次数加成10倍,就看到 b 收敛了
    - ]# U- @2 A6 G8 D6 O" t. Bw , b
    & F% Z) Q8 }+ x/ F1 i( F8 ?' S27.002620697021484 14.826167106628418
    * p" u& [- X2 }0 h* H* N4 R" z
    : e2 N. ^) {$ \3 |和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-18 21:23 , Processed in 0.059930 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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