设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 $ h+ @" n# i( X) t6 k
      x/ v& r4 j7 O( W4 B
    为预防老年痴呆,时不时学点新东东玩一玩。: ^* S; M; L* {
    Pytorch 下面的代码做最简单的一元线性回归:* M1 e  G$ X% H  s1 Q2 d" m/ f
    ----------------------------------------------
    4 j' M4 R; \9 [( C+ rimport torch0 r$ |$ F# Z# ?, \# M& ^8 w
    import numpy as np
    1 K/ ?9 V7 |) H8 ~. Fimport matplotlib.pyplot as plt
    1 @. Z! o6 k7 }- Limport random$ p0 u  r; @& x" _9 P4 T) B
    1 M# R: {; s8 D. @, m
    x = torch.tensor(np.arange(1,100,1))5 e, T8 c3 W$ p
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    # k9 U7 C$ N2 ?
    % q9 ~1 b- M+ i* Dw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    % R) ]1 b5 c4 o& x8 Jb = torch.tensor(0.,requires_grad=True)/ A1 I9 C/ P- r' f5 Q
    ; H# }, ?) p/ N) n! d6 d% G
    epochs = 100
    6 ?1 b7 i6 L3 b4 |& V$ n/ a2 @6 b# k; T) ^+ A( P
    losses = []0 ^! `4 K% S: M& B" m( c, I
    for i in range(epochs):
    4 {1 s$ Y3 i8 s& F8 U* ]/ `  y_pred = (x*w+b)    # 预测' w' R& l/ M  S+ M6 s
      y_pred.reshape(-1); k5 d& z, A8 f' c- n

      V5 A, b5 X4 }  P( ~, F8 n: X' T  loss = torch.square(y_pred - y).mean()   #计算 loss) m" w: Z+ _( G. F3 F+ I
      losses.append(loss)' l8 j  c* x, f+ R  {
      0 M- j& N# u% \9 j5 G0 o/ K! ?# b
      loss.backward() # autograd
    # S8 W; U* o9 L* r0 K/ M  with torch.no_grad():+ t6 X$ L" \3 a0 d
        w  -= w.grad*0.0001   # 回归 w3 {& N% p; M+ \- g8 f% H
        b  -= b.grad*0.0001    # 回归 b
    4 o6 O4 Q& H0 n% b# v# o  w.grad.zero_()  
    6 L7 q. s7 F) i) n9 A0 F6 _% S  b.grad.zero_()
    & @3 F* s$ l, _+ R' f8 C9 u( @! [2 y: r5 [6 R3 O! A5 W) @
    print(w.item(),b.item()) #结果
    3 S" H$ ^( W/ r, z$ y% W. w' p( r0 ~: d' P) C- V- o! a6 _2 u
    Output: 27.26387596130371  0.4974517822265625
      O+ M) y9 C5 E8 i3 d( \8 e$ `----------------------------------------------
    8 o" U4 A9 i5 `- X最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。# K( R  J& i3 B. F) e, O: W6 J2 y) M
    高手们帮看看是神马原因?
    ( n; [4 K7 q/ L  a5 w' }, b8 r4 B

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    9 K* M; _8 r4 F5 ~1 M  Q1 K' T) D1 l0 e2 x" A, K" d
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?, ?6 i$ N* t% q4 I
    -------
    & [- O- Z; A4 r$ Y. R. I/ _8 G不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。" u4 \3 ^" T! j* J6 b
    -------
    8 X. e! n, V6 G6 b  C  H% _算法诊断部分,建议把循环次数改为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$ o1 V! t, i# x* p
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    - ^( h& T0 I/ h2 J- J; A" A-------  P8 J0 n: w$ ]2 }6 z
    不好意思, ...
    ! i! v  {8 [. J4 ~1 U
    谢谢,算法应该没问题,就是最简单的线性回归。7 z1 e: g9 s6 ?7 R. j/ T  h; \
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    # U8 r: N% j) O1 ^
    雷达 发表于 2023-2-14 21:52. a+ K5 }: s4 J( ^9 _0 \; B! F' {
    谢谢,算法应该没问题,就是最简单的线性回归。
    + A7 x; @) s* G5 U. c我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    - x- e8 Q! T( t" B0 V; ]7 k% C
    , `4 w0 I: Y2 r; b7 Y+ x8 G! O7 |刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。, \. c) G! m( \- f; E* G; B. r2 s
    & Z4 E, l2 r& S9 q( a* ~
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    # _7 q- Y) E: W
    老福 发表于 2023-2-14 22:00; Q/ P8 A4 G0 W) W' f
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。7 P: s, j5 A& ~) N& Q+ K  B

    ! P0 D* k+ p# N" G; E, ~* I或者把b但的起点改为1试试。 ...
    8 j  f7 ?" n  u+ e9 q! \
      s; V0 _7 H( J$ M# V
    你是对的。
    9 ^) f8 ?3 f& W9 @: z5 x1 \去掉了随机部分9 d0 U6 M, M$ d1 C
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    1 \9 x$ G2 \$ Z. _/ ^4 o. R' dy = (x*27+15).reshape(-1)
      Y/ t- _1 L) a3 X8 Y' N* S7 U6 w7 o
    循环次数加成10倍,就看到 b 收敛了9 @2 c. i7 M+ w" q  i3 a& b
    w , b
    : W! H( N) x' z27.002620697021484 14.826167106628418  n1 `9 x. C9 f, y: B: m
    ' \+ |$ S$ d/ T* b) k
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-21 22:03 , Processed in 0.056468 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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