设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    2 A0 B5 T0 Y5 Y7 N+ ?; V. E
    5 y& A, V' Y4 x) ~2 I为预防老年痴呆,时不时学点新东东玩一玩。
    . q9 E- O% }/ W5 W/ S5 n0 JPytorch 下面的代码做最简单的一元线性回归:7 g, Y, N8 {: X- S+ l- h! k  R
    ----------------------------------------------; m, j+ t6 i5 T  n& G( G+ s
    import torch0 ]4 i+ N( q3 u/ I
    import numpy as np
    $ }) {: C6 e: z. i! C* gimport matplotlib.pyplot as plt
    ! x' [3 a3 H6 K( M+ b: r2 iimport random; x/ y0 L2 Q1 b- x: }

    1 w  q+ T7 [( G0 u8 ox = torch.tensor(np.arange(1,100,1))5 D! p/ x2 X, G* Z# _
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15& Y' b# E; j2 L* o4 S/ q

    & c- d. g6 s$ X: v- D& ow = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    - O# Q2 {! d, \9 ?1 Eb = torch.tensor(0.,requires_grad=True)& K7 f4 H) O; D/ t6 z6 H

    . Y' w: |4 s% r9 [" Depochs = 100
    ) i$ r0 |+ h4 }$ `5 p( j# D6 I/ J, N" i2 P, e
    losses = []
    % l8 O0 e7 w8 }  p. h' q& W  cfor i in range(epochs):
    / `+ r8 {( d! t8 N* @  y_pred = (x*w+b)    # 预测( s6 |- g3 p0 r8 |. @6 r7 q3 q
      y_pred.reshape(-1)
    # c, Y' t1 b% l8 M
    , l  V" @( q$ U8 n; U* Z- Y- t  loss = torch.square(y_pred - y).mean()   #计算 loss8 L" P5 D( g: G# ]" x5 d% K
      losses.append(loss)
    3 R; g5 |* X8 K/ W  
    , u0 ~  |, W$ R& S  loss.backward() # autograd
    # K: N) F# h6 W! ]  with torch.no_grad():
    & G. K! {& _0 d! m  t    w  -= w.grad*0.0001   # 回归 w; d$ a) d. m5 O$ r( X' Z5 n
        b  -= b.grad*0.0001    # 回归 b
    % L) {  U$ r7 [5 i* ~; V4 R, ]: _  E  w.grad.zero_()  ; X$ D7 X4 [+ k5 N3 S, C) d
      b.grad.zero_()
    5 T1 Q* W4 S7 M; @) V; O0 S+ b4 V# l, O
    print(w.item(),b.item()) #结果) Y- z. J8 C0 `! `

    3 H4 j  X5 {- Z' J; M3 h# FOutput: 27.26387596130371  0.4974517822265625/ B. P, u+ [% \+ u  a
    ----------------------------------------------8 ^1 Z! w) J; l
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。$ R, i! m3 E3 Z2 ~6 P6 y  g
    高手们帮看看是神马原因?3 O7 L( d, q/ c* @

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 $ v, ~, _2 y2 |$ N# x

    - Q6 J1 f7 i8 A7 s1 }, I+ P没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?2 I$ ^0 I7 n2 o6 f
    -------
    , l4 l/ e% g9 C+ Y, a- L不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。% s' C4 U4 o- K* o: y8 n
    -------
    ; Z$ @, _: k- i  T  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:239 c9 m# c- n% w2 w( q
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    8 j+ d$ S) C+ q2 ^. u-------% M3 n) J& \8 g# _' S8 |5 h# M
    不好意思, ...

    , N0 f) |3 w7 K9 z. a) e/ E& C  Q谢谢,算法应该没问题,就是最简单的线性回归。
    0 @5 D1 {6 h7 K1 v我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    - G) n" r# ]! B# r+ \% N7 M6 B
    雷达 发表于 2023-2-14 21:52
    0 n, j* J; f; ~: @谢谢,算法应该没问题,就是最简单的线性回归。
    9 V  Y$ p% H$ g( j) y& N我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    - x* L/ S, I/ o0 `* @1 f4 Q. m* ]
    ( @* Z) b% o4 L+ I% G5 O刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    + w( E! B* l& ^7 H7 y  t7 z* i5 v$ |" e
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    * }6 i0 ]" G/ D* i( D8 B
    老福 发表于 2023-2-14 22:00
    & A& M% {+ h) u5 p3 F) _: A刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    ) p/ k0 [) A9 x6 b! t7 y# b, ?- Q6 F8 {! d2 m
    或者把b但的起点改为1试试。 ...
    ( P8 I; ~+ A  `8 o

    7 v4 }% [" G7 n% z0 b) o. d你是对的。
      o5 M: u$ p6 A/ M& H去掉了随机部分  H" U! H3 w  K2 I
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)1 ~) E# p( g5 O8 i7 f: m
    y = (x*27+15).reshape(-1)
    8 p/ v1 q1 q5 _! X# {0 M7 {% u" R# L7 a$ z4 }& f4 m5 G
    循环次数加成10倍,就看到 b 收敛了
    ! I% J  j8 Q6 d+ x. l' K" ~2 \w , b
    5 E+ U& C6 M% q: L8 ?* v0 n4 e7 W27.002620697021484 14.826167106628418
    # g( h0 H2 e. F' U( l- i# M, M# T3 y3 |- I$ c
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2025-11-5 14:07 , Processed in 0.044938 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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