设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    1 o8 X% V: F  J( [" n1 U
    , t4 T* x. w  |4 C* Z1 K" c为预防老年痴呆,时不时学点新东东玩一玩。. E% X5 {2 W" Q/ t$ g4 S2 g
    Pytorch 下面的代码做最简单的一元线性回归:0 a/ Q3 C$ y9 }$ i( [
    ----------------------------------------------
    & _, ^/ }* z, Y' qimport torch
    2 M" D* Z+ @6 f) Oimport numpy as np8 \( l' g& C: x
    import matplotlib.pyplot as plt
    1 y8 n3 o6 K: j' D! O0 d) Vimport random
    : e- C' O( f; C' y) B8 S- U4 ]4 |( t0 [5 f
    x = torch.tensor(np.arange(1,100,1))
    ) i3 t" O/ D& m0 Ay = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15" x- Z1 F9 O3 R  p

    " M  X1 J8 Z. J" t& B3 Jw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b4 p5 |2 c, E6 V7 y* x' A, q2 Z
    b = torch.tensor(0.,requires_grad=True)& Z" s* d% C2 i, o* ?
    & G, r' n0 ]8 t) A0 Z. }
    epochs = 100
    : w3 r8 p& J+ g0 P( Y# `  s% l# e' I) N! B$ W" L. y- Q
    losses = []* J4 t- Q1 c7 s4 W
    for i in range(epochs):" u, O# C  e3 f2 c  ?; k
      y_pred = (x*w+b)    # 预测
    $ i( b5 Z; L* P1 f2 I2 ~) ~  y_pred.reshape(-1)
    2 q7 \$ L4 W, _$ \( }" V- m, [8 h / f( o; Z& Q, i- g# w# M% z& G1 B# c
      loss = torch.square(y_pred - y).mean()   #计算 loss- x* c8 o( A& }$ j9 {3 B  }$ l
      losses.append(loss)
    : i# B' }7 Z: e6 R, S    g7 Q5 \5 a' v- @  i6 K
      loss.backward() # autograd% m; ^. J' q( N9 u
      with torch.no_grad():
    ! Z" n8 ]6 Y9 R" ^3 G; B$ r    w  -= w.grad*0.0001   # 回归 w- n2 f( w7 q% J
        b  -= b.grad*0.0001    # 回归 b
      X: P! n& |  [" x, C1 M) ?% P4 e8 b  w.grad.zero_()  
    : o; Z) e! A7 M8 s  b.grad.zero_()* a% `$ u6 g  k
    * T2 V( i7 G& H6 G' x& R* H* A
    print(w.item(),b.item()) #结果' W: z: V) s: F- q: h$ X" C6 Q
    8 H9 w! o5 s# {6 Q( j' y
    Output: 27.26387596130371  0.4974517822265625; M+ o" p1 Z7 W" n  f, `
    ----------------------------------------------
    6 y" U; W/ q( M0 a- [8 g' T6 v最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ' _7 \; v4 W) L' ^! ~高手们帮看看是神马原因?
    7 ^  z2 T) b3 J6 y5 C4 H+ a

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    9 k8 W3 T& C3 P: e" ^* y/ ^
    , f' f# e8 U8 l: o) }没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    4 o& S* e' s& Z/ b-------  e5 G! @( p2 E
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。5 o( V3 _8 v; \# Y- {  w8 g
    -------, v5 T# y+ L1 ~2 O! e/ ~1 U' d$ g
    算法诊断部分,建议把循环次数改为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
    2 C, l( p/ D$ D8 @没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    % ?7 y( K( c! c4 ^, g-------8 R& U/ c3 ]% C: [. m+ j, t5 A8 a
    不好意思, ...
    4 h& k" L/ d9 K. H( N4 i% t' q
    谢谢,算法应该没问题,就是最简单的线性回归。& U: ~* c. M$ u6 M% G
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 8 H; W7 u9 m7 y
    雷达 发表于 2023-2-14 21:52$ }" Z1 g0 d) z: E
    谢谢,算法应该没问题,就是最简单的线性回归。
    ' ~* T" r2 z& m) u  A我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    6 `% ]3 n' [& r7 v$ ~# H4 R
    4 c6 K8 W  M6 |0 o  |
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    & P: O8 y3 b( `9 f2 e; @9 z4 a$ P9 ?4 X; U% k, H, D0 t- a, O
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    7 v! N3 ^4 n4 n
    老福 发表于 2023-2-14 22:00
      M" B9 ?# t( i, a- R! X: y3 M# S/ C3 ^刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    - z% ]1 ~) O  V( u. h5 u8 L( e
    # G1 I2 M" n* }- o或者把b但的起点改为1试试。 ...
    4 h# E9 m+ F, P
    4 u7 `7 I) j& _: C, z' l$ R6 \2 p2 U6 ^
    你是对的。
    ' G. L7 a4 X4 g" f& Q去掉了随机部分/ v1 ^- |$ Y) a7 u8 y; F3 ]
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)3 a8 G2 V" a& J# e# e" k
    y = (x*27+15).reshape(-1)& Y( ?& T1 i* a- M- l" G/ X4 ?

    : X6 y$ C! S& l: W8 }循环次数加成10倍,就看到 b 收敛了* B% p6 N8 |) n
    w , b! E1 v1 b2 _+ [
    27.002620697021484 14.8261671066284183 \! X) P1 y( N/ ?2 s# j
    ! @: T% q" d0 U- }) h( m
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-28 22:06 , Processed in 0.057328 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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