设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    7 r& |/ {; |- S% e( [& j2 X; v+ L" g1 L% \
    为预防老年痴呆,时不时学点新东东玩一玩。
    2 Y! c$ ^4 a' ?1 `& M' _. ~Pytorch 下面的代码做最简单的一元线性回归:+ @4 e! m" ~5 o/ l$ [5 f
    ----------------------------------------------8 w1 X* B1 V9 u# P, X
    import torch
      J1 q4 ~. K$ J( d* e  o& ]* V0 f# }import numpy as np$ A! j/ O0 P" w: Z9 f+ a
    import matplotlib.pyplot as plt& M# X& h5 S8 e3 b2 k8 _3 L
    import random
    ( |3 {0 W7 ]/ t# h
    0 ~2 d6 r6 m" V8 P% S0 L$ jx = torch.tensor(np.arange(1,100,1))
    * J0 J  G" {/ n0 H; m5 q3 jy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15* ~, {1 Y& V' x# l! N  a7 v: |

    * ?  t- ]5 W( b, p5 dw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b+ N* g! s' r8 C& c' }) i
    b = torch.tensor(0.,requires_grad=True)
    * d: E. P6 D$ R+ }& n% k) V3 m, m/ c% o% V% K0 n
    epochs = 100+ N3 s' A( \% y0 i! l! n
    # N9 t' J5 V9 l' a8 [" h+ W2 Y
    losses = []4 P( r- _9 n3 H$ h) G& w4 F4 J
    for i in range(epochs):
    1 S& `# D- s% R/ m" U  y_pred = (x*w+b)    # 预测
    3 h% A8 `$ L: ]$ b  B7 ^( @' S" c  y_pred.reshape(-1)
    ; P; P# T8 t" y6 i: P; X
    ( z, O; `/ H" k6 Z9 w7 E! D  loss = torch.square(y_pred - y).mean()   #计算 loss
    ( T0 n8 B1 r4 b! r& {& T4 w8 |2 _  losses.append(loss)
    + Q6 P# X. Q0 e  
    & F, X' B! U: }6 p( ~  loss.backward() # autograd
    $ T/ a8 ?5 v" d) {+ @  with torch.no_grad():
    ! v) g3 [4 M9 s" b- _3 ]9 r    w  -= w.grad*0.0001   # 回归 w3 u0 b7 k, i1 V" e) A
        b  -= b.grad*0.0001    # 回归 b
    ( ?0 z/ d  S5 x  w.grad.zero_()  
    ) L2 \, m; v$ O3 y: j  A  b.grad.zero_()0 ?$ b" @" _- U7 q

    # j5 h( o6 B: W8 l* U6 F, k; ~print(w.item(),b.item()) #结果
    3 ]. A! p. Y5 W2 s+ ]# D( }- N
    . ?* z5 V" {( n( M3 N1 nOutput: 27.26387596130371  0.4974517822265625
    8 y; r2 @( F" F  j/ {; H& f3 u----------------------------------------------5 e0 q5 d/ a1 \7 {! e' b3 x
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    0 l0 q3 I3 R0 ^, ^/ t7 O5 m高手们帮看看是神马原因?
    ; P* p1 X2 }: Q1 W! k* e: h. N

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 / L# w) v# W3 @* z$ N
    ; g8 l' l' J; M; a6 {6 l
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    , @; Y2 |' ^+ e9 s( J-------
    + r5 |" l# h4 f9 C不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。7 }& {. F0 `1 y; R1 F9 v$ i; }( h
    -------0 f% F- F5 l' ~. s* L; E
    算法诊断部分,建议把循环次数改为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
    - U& I2 C* D& M3 H没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?2 t, N' S* R3 g" E7 p% G  m
    -------2 k+ X2 e2 T  r0 R* x& ?
    不好意思, ...

    & y7 I8 ^+ \4 L. ]. b2 L  j谢谢,算法应该没问题,就是最简单的线性回归。2 l! w7 M! F" k1 C+ m3 ^  ?
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ! S: y5 S) k& p  N3 ?& V2 U
    雷达 发表于 2023-2-14 21:52
    : Z" b7 g/ ~% C: G- @* ?- M: s- w谢谢,算法应该没问题,就是最简单的线性回归。# g; j8 u, B. I, o9 s$ o1 `: W
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    . V5 I" T5 ~: H/ h; Z
      M, f9 f& B$ A" q8 E& i4 ]
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。7 ?! v% R' ~% ?
    , c1 b; R0 g3 p% {" `! q8 ~
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 & |, \" B2 ]8 k: b0 Y; k0 V
    老福 发表于 2023-2-14 22:00
    ' v+ p! ?9 O. [  @3 d1 v刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    & S7 V2 b; h( {- x/ Z3 H- [/ j7 t: b/ }7 A2 d8 v2 x/ B, [
    或者把b但的起点改为1试试。 ...
    - \2 P: {" M" A: ?

    0 V5 m5 i+ J+ u: X你是对的。5 b- V& |  B& x3 \+ d
    去掉了随机部分2 t# }8 W# K3 A6 \* B. G7 U8 ^0 v
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)) i2 m2 B4 m# _" g' B3 s# t- t  d
    y = (x*27+15).reshape(-1)
    % W! `3 l- z4 b9 a, K  z9 Y
    . c% S) U8 {! `3 J% g* y循环次数加成10倍,就看到 b 收敛了
    * c4 ]- Y1 t0 L) p" E. Qw , b
    9 d7 _5 n+ u: g/ `6 ?27.002620697021484 14.826167106628418
    2 Z  ~6 D3 O& e+ m, _- h( o- Y) g- ?/ N% X; Q
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-12 22:06 , Processed in 0.029740 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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