设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    & z6 r% B" c+ w+ y
    : P4 {9 A7 Q  s8 @为预防老年痴呆,时不时学点新东东玩一玩。9 Z3 @- G; v- O9 y1 m, v6 j
    Pytorch 下面的代码做最简单的一元线性回归:
    / P  Y' J" i: q/ w5 X$ z3 U----------------------------------------------7 Y" d/ t* c% a" ~- E( m
    import torch# S, R$ ~. L0 s# E
    import numpy as np
    4 F1 j) y1 z7 V6 K& Cimport matplotlib.pyplot as plt
    ( s4 P) [7 Q( c& i  zimport random% w! R# s" h8 E0 x/ ?% w
    / D# p8 G0 T/ E; n
    x = torch.tensor(np.arange(1,100,1))
    0 ]  l2 F7 |1 W( |. d& Vy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    6 O8 L; h* ]; G( l# b3 S9 V! A# m6 Y& Z' U; O# k0 R8 I
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    * H: l9 _/ ~3 v8 W4 db = torch.tensor(0.,requires_grad=True)" Y1 u5 F+ t6 ?3 V  t  {

    6 v# n! H, n. Q# t4 |epochs = 100
    0 J* V. Y4 H& C6 g9 w4 D& w+ ]! A( P. I
    losses = []7 b" Y9 }  Z5 w/ w0 Y' d" U
    for i in range(epochs):
    2 q; v+ [/ ^4 V5 D: Z1 D/ R  W  J  y_pred = (x*w+b)    # 预测
      h$ l( V7 E7 o3 U" R0 \  y_pred.reshape(-1), O! |* N% \% j4 i5 ?+ d* N

      X4 K9 Z4 U, |1 @  loss = torch.square(y_pred - y).mean()   #计算 loss
    $ e" d4 u5 @4 g* O  losses.append(loss)
    # G' i) G4 }: M5 T2 q9 X  
    * }) w: A! y+ ?2 d  loss.backward() # autograd* e4 h9 t, m" m& ?+ U! U
      with torch.no_grad():6 L9 |1 ~6 c. I' a6 q* ^9 z
        w  -= w.grad*0.0001   # 回归 w# l' _% _7 A' E* S0 x
        b  -= b.grad*0.0001    # 回归 b . F( h0 g0 ]; l
      w.grad.zero_()  
    : h: v9 a6 ?4 R% A( {. V  b.grad.zero_()" F' I2 B' e2 c% X: H

    9 y, ]  F3 c# q- e+ L( W, y+ j9 Q5 Xprint(w.item(),b.item()) #结果; @  m2 N  a" d2 Q

    $ p* V. ]  Z6 G4 gOutput: 27.26387596130371  0.4974517822265625
    4 a+ e1 T5 C  V. e----------------------------------------------
    ! D' N0 f, A! F% {+ e最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。5 W9 ?3 z+ \# q; H$ a4 `1 v
    高手们帮看看是神马原因?
    " ~% L5 \  d" x4 m# A( W

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 : I$ r. O: C4 p  G( _& I. U+ y& [/ H
    # X2 D( L: q' E5 i4 V: ]# j
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    9 M* J+ D( }7 s3 E1 ?- N-------
    7 f) O: u- J0 c9 g不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    " N; V' ], N8 C1 ~9 F& F-------, y5 X6 A* J+ q4 p3 j
    算法诊断部分,建议把循环次数改为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:238 b6 ?/ f' M! P  s+ ]
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?) A* ]% P/ k+ A3 l: r" M" v! m
    -------
    8 ?$ Q" |9 A5 J5 v0 y* D不好意思, ...

    / M1 n' A6 ]; l) n3 f/ ~; x, ]% A2 d) M谢谢,算法应该没问题,就是最简单的线性回归。
    $ w/ J) V: f3 W% T1 v我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ' f4 ?! i1 V$ H+ O7 \0 A& D, }+ p
    雷达 发表于 2023-2-14 21:52% D: `  n  |" ?+ C
    谢谢,算法应该没问题,就是最简单的线性回归。
    8 L1 C# E4 _5 Y& s9 `; Z6 X我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    1 J$ @4 S( u! ~# N, \# D
    , J4 k- Z* ?! ]0 _; }! W
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。( y' L: d; v/ s/ p

    ! V2 K! z( B+ j8 b/ V2 d或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    9 o4 I( o$ d# I' f4 N2 o
    老福 发表于 2023-2-14 22:00
    ; h# h: k" @: s% x4 I刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    , ~; ]0 n1 _  M' h4 ]: B
    1 I- b) q) l6 d2 |& |或者把b但的起点改为1试试。 ...
      B1 O2 C' d" u

    8 }0 ~" f/ u6 P/ |, n8 q, Q你是对的。
    + Z0 R2 d1 y2 t9 ]% B& Z% h去掉了随机部分
    ' S6 Q3 f; z- Y, k( w$ O2 a#y = (x*27+15+random.randint(-2,3)).reshape(-1)
    / w3 M+ ~' K4 d. t" Ly = (x*27+15).reshape(-1)8 k/ p8 l" D; u" y/ q  k

    2 B/ S' P5 P& P" M8 M/ t循环次数加成10倍,就看到 b 收敛了" Z* u: E1 I3 c
    w , b& H9 S, p1 ?' f0 G$ l5 j5 m; }
    27.002620697021484 14.826167106628418+ C2 P+ ]3 y; z2 u. w; }
    " c8 N! B' F0 M( k
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-1-28 20:49 , Processed in 0.053679 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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