设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    ; A/ j) r8 g8 T0 H; \
    : x* F5 K( c9 ^, A为预防老年痴呆,时不时学点新东东玩一玩。
    % Y  R  H' w5 d; h2 z+ E( oPytorch 下面的代码做最简单的一元线性回归:
    + S$ l! Y6 |( p' _8 ~----------------------------------------------
    6 c  C! ~: ~; G$ v1 Eimport torch5 H( [4 u8 Q/ Z& a) ^0 v0 _+ f
    import numpy as np: }$ [7 P! \, d, G* }, K: X- ]! y
    import matplotlib.pyplot as plt/ u6 [/ \+ K$ Q: z  Y4 y7 [8 Y
    import random! J& g2 R1 q7 m* i
    % z1 U7 _3 Y' ^$ f! O; v: S
    x = torch.tensor(np.arange(1,100,1))
    5 W9 h7 }, Q# e, Uy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    + P- A1 w  x( P
    + x( n2 r8 d6 r  ^. W) fw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
      w2 W! j  K& X+ [b = torch.tensor(0.,requires_grad=True); {5 g. O( u7 z! ^# g; K
    7 K' }9 P2 n; v5 ]+ D
    epochs = 100
    " s4 x+ ]/ Y" s) \( j5 f- Y( A8 o1 B) e9 K: r1 M- F) ]
    losses = []8 g) s3 s: \9 N0 C
    for i in range(epochs):
      D5 s$ y+ }" }0 z9 o: y  y_pred = (x*w+b)    # 预测% ^. h8 g  h: [- @( T+ m
      y_pred.reshape(-1)  ^( A2 g: K1 p$ I7 W
    8 d/ w5 ^+ F/ w( K; Y/ S% j
      loss = torch.square(y_pred - y).mean()   #计算 loss
      d2 b' r7 a4 _8 _  losses.append(loss)
      d; ]; j1 S1 Z7 w. C% A5 I  
    7 k& e5 w6 i+ q4 s% q  loss.backward() # autograd
    4 Y- C* @. ~# W: z  with torch.no_grad():* F9 s( Z/ s$ X
        w  -= w.grad*0.0001   # 回归 w
    1 h0 k/ a8 [6 `3 q0 e1 h8 [3 A6 x" ~    b  -= b.grad*0.0001    # 回归 b ' N3 W$ J' C/ O" ?) }, K
      w.grad.zero_()  7 ^* B" \" V  D  v! i9 [
      b.grad.zero_()
    + _3 t6 Q! |# Z# @! ?7 \+ T% {# F. K, F. D/ g
    print(w.item(),b.item()) #结果3 B6 m+ v& L/ n, y; o$ d
    : T0 \7 V" l0 N3 M: `6 h3 D' [4 S1 M- t
    Output: 27.26387596130371  0.4974517822265625  O) W; p. Y; u! e3 z( i
    ----------------------------------------------
    + d: \6 w4 [: `" y最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    $ Z6 M/ C. G8 [' {/ P' C高手们帮看看是神马原因?. u. {0 j0 [1 `

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 : d! n. y% T9 p; P, M# i1 A. P
    . H4 \2 [) `6 z# _# _% H2 ~
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ' |: j" W2 D7 r+ v-------
    ! M5 w2 b; h" `( T% L) j! V不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。) X7 W2 m% g+ ?, h* }
    -------
    4 S# a2 ~4 O8 X: c6 Z4 O5 C- \算法诊断部分,建议把循环次数改为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
    ! `5 h7 s! P- u+ F) B9 }; v9 o' a没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    7 T! E. J" Z1 F# ^5 T0 Z-------( b5 r9 f& P7 l8 B
    不好意思, ...
    ( j/ p% ]: l( U# {
    谢谢,算法应该没问题,就是最简单的线性回归。! f; E! h$ p$ W$ _; f( P
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 6 ?, @! u4 M' M: s7 I( `' F
    雷达 发表于 2023-2-14 21:52* O% f' D* K' J2 D' [0 O3 d
    谢谢,算法应该没问题,就是最简单的线性回归。2 e0 ^8 C. V. B# W
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    3 n# z+ X6 d/ v, h( |" c9 x
    . W( |/ D- s; L, m) ~刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。+ w, o. l) ^) r( d# L) n

    8 k+ V% A; g* o" t: }+ ^' M; N或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    7 l8 b) c2 A7 c% x1 f/ N
    老福 发表于 2023-2-14 22:00
    , m8 Y7 Z6 G$ l% i) B) ]$ H刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! n3 s2 ?/ h  u

    / I- [( E$ L) ^, ~$ j  b2 B或者把b但的起点改为1试试。 ...
    : k. m% e4 B# t

    1 i# r% g) u" Y; e- z: [你是对的。
    2 W6 r1 I) @8 G) L, _: X去掉了随机部分' B% l: U4 x" z! h- A1 u4 B
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)8 R) u7 D! C! Y
    y = (x*27+15).reshape(-1)
    ' u2 y! l5 F9 F: A3 @1 q- O6 D& e: a1 L# {) m
    循环次数加成10倍,就看到 b 收敛了8 t1 k5 Q$ F5 a0 t1 B
    w , b- `6 k6 X. n; J% X  o! d* u
    27.002620697021484 14.826167106628418
    6 U& p: O+ V  a, ]! ~7 g$ F1 B5 s' L2 r* j- Z% o
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-7-25 23:04 , Processed in 0.057350 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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