设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    8 f+ ^% P2 F: d- b( _! [! G% \& I: f# n* l: o
    为预防老年痴呆,时不时学点新东东玩一玩。8 \, Y/ r3 Y, F+ P" J
    Pytorch 下面的代码做最简单的一元线性回归:, ]& o: r) D# H/ p6 s+ [! I1 T
    ----------------------------------------------
    : }/ }* Q. r! W1 d3 m2 |! @import torch
    ! w, B( Q0 h- G& J! X+ e( pimport numpy as np  U) y4 U; X3 L% x4 E$ R3 q. x
    import matplotlib.pyplot as plt9 ?6 |6 b: H0 Y" I
    import random& }9 `8 _* g* R% ]
    ( G# \5 n: w/ _6 h
    x = torch.tensor(np.arange(1,100,1))
    2 D6 D. u; S; u2 X1 ny = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    % B: f5 B! Q/ Q" H6 Q
    4 x* X; A2 c1 R7 V3 N% f8 g" R& nw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b2 _$ q/ K3 T+ ?8 z
    b = torch.tensor(0.,requires_grad=True)/ Z: P; i/ {/ \- s/ {$ h- g% e( F

    & @& s& N( r5 p7 _% Mepochs = 100
    - ~2 ]+ E- l* w7 A/ Y6 ]1 k, o% P% s
    losses = []* R( U4 t+ V) V2 a$ r. M9 }9 z
    for i in range(epochs):. V, {1 X1 E7 b6 J3 X
      y_pred = (x*w+b)    # 预测, \4 l3 ?! W/ F( u( L) r9 I
      y_pred.reshape(-1)
    * a/ G) z2 ~2 D' d2 [
    9 b3 }0 A4 U& E+ V: G' {  E% R  loss = torch.square(y_pred - y).mean()   #计算 loss
    & `7 M& `' i4 y) w4 x& V# m3 q/ m  losses.append(loss)' ~( e9 b) _( r) w1 y( T. q  j6 {7 A( [
      & o3 \8 o5 v+ h9 ^2 ^
      loss.backward() # autograd
    , |( j: B. y( a, R- Q; x) _  with torch.no_grad():! }  j+ }* M. b
        w  -= w.grad*0.0001   # 回归 w: n5 ?  N9 U/ S) C" q! l8 h
        b  -= b.grad*0.0001    # 回归 b
    ! c( Q3 Q8 {5 b, A  w.grad.zero_()  3 n+ ]& ^( m7 Z* b0 r3 V
      b.grad.zero_()
    , f+ e" R" g) s3 [
    # F2 |9 E# n" Y9 Aprint(w.item(),b.item()) #结果
    : y! L! |+ g# D$ H% w) N' @9 C0 N0 ], t  Y! A" m% u
    Output: 27.26387596130371  0.4974517822265625, x* v! _: _. t9 K7 P; F
    ----------------------------------------------
    6 p4 P: E& f! Y. f" H% N0 v. }最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ) d1 {! v8 a& ~0 ^4 p8 @1 W  p* h) p高手们帮看看是神马原因?
    9 A# C) |, r- M

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    . o1 C- c; ?( g* U, ~# y& [% A- c' p) Q
    3 y- @) j! n  w) ~没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    ! T1 a- P! s6 g+ C9 C+ O3 v# Q-------5 j# h4 N. a: [4 q
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。& _' o) A) R2 U+ [6 e
    -------
    : J; ~; k$ u9 V算法诊断部分,建议把循环次数改为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 p8 A5 ]- K1 ]& V% H没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    0 b. D  t0 x1 z7 K-------9 d$ m- S! A- J
    不好意思, ...
    9 [' i5 p# z4 h- X: M( B( j, r( o
    谢谢,算法应该没问题,就是最简单的线性回归。
    & M6 B( ^* `8 P& v我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    . K0 q" V) R; {2 a4 j! j
    雷达 发表于 2023-2-14 21:528 H' P4 V; \2 ~! z! v
    谢谢,算法应该没问题,就是最简单的线性回归。
    . B$ |; B; t" Y" ?我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    4 o0 f; J) P  Y
    # K5 B1 H' t  s  {; I" U( b7 X
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    " L# A/ Z, m$ i4 x' @
    & J* D0 m4 z; i2 R$ C% L或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    3 `& j6 F+ m! J
    老福 发表于 2023-2-14 22:00
    ) R$ _  J5 |5 I( h: X1 o1 u刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
    , y1 {0 m, s; ^; z! {8 ?( b
    6 H/ V  I% F% W+ \8 [- [( y+ w或者把b但的起点改为1试试。 ...

    - I3 F+ j7 q0 Z+ \) J
    ) F4 b: T* }! p" X$ [你是对的。
    , Q- D  Q8 Z- p去掉了随机部分/ S- U& Z/ z) l* i3 \0 P. ]
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    - e" k) }" C) `/ o/ ~2 ty = (x*27+15).reshape(-1)
    / x  F: @: u" k6 E& r3 [2 ^# U6 r! A
    循环次数加成10倍,就看到 b 收敛了
    " U% Q; F& ?/ N; dw , b
    8 Y; h  T* w" R$ t1 {27.002620697021484 14.826167106628418% a2 Q% q+ w% k, y  `3 e! P: ?  r* h
    & i4 T7 i& U4 R- l' c
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-4-28 03:47 , Processed in 0.060999 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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