设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ! L' B# M+ G, u7 ]# L2 b

    " M$ X  H# |* r& J; {  R3 Q2 A2 U为预防老年痴呆,时不时学点新东东玩一玩。
    ) q& ?3 }) {, s, O& I3 JPytorch 下面的代码做最简单的一元线性回归:
    + J$ `% N( w- F8 T, M0 }4 {----------------------------------------------) K* Q4 I1 c; H
    import torch
    * K% ?! j0 F& t% c5 r. D0 E% o# jimport numpy as np1 O8 }3 r8 R. C9 g- x; r
    import matplotlib.pyplot as plt- U' d( x* D3 ~9 n9 ?( D
    import random
    " ^& z8 F/ M9 E! S' l3 }; T/ k( A/ }% T7 w, T" y, ], J
    x = torch.tensor(np.arange(1,100,1))
    : p3 x2 o; ]8 M/ k7 P8 t! @  ly = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    " p& b, `, e* q- l' d/ N/ ^' b/ L$ R# W5 L
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ( V+ P2 A" S) f7 p. lb = torch.tensor(0.,requires_grad=True)1 ^" b5 A: G- m4 f: @& q6 U
    + u1 y- O% G6 b3 [1 R' \8 }2 O5 s
    epochs = 100; X3 T# V, B) q  @8 b7 s
    # Q$ O3 M" p7 w3 Y, q9 m, q* w' B
    losses = []% l" O& P2 M- a$ i# r7 f
    for i in range(epochs):% @3 x5 \' A/ Y  m; B% g
      y_pred = (x*w+b)    # 预测
    6 |. G) ?! L7 U  y_pred.reshape(-1)
    1 x) j6 n# a9 Y1 \9 @4 _* u5 _
    ) g9 h7 x% S. V. k  loss = torch.square(y_pred - y).mean()   #计算 loss! D( H8 h# q! S
      losses.append(loss)
    ) s  f! K6 ?2 L  
    * ]5 c9 a0 G9 E1 b' A% r  loss.backward() # autograd8 c! z' e6 |3 V; Y( v
      with torch.no_grad():, d2 ~" |- N: x0 ^5 S. ?
        w  -= w.grad*0.0001   # 回归 w
    ' t' x+ e; F& {7 j$ S# H+ l0 I) k    b  -= b.grad*0.0001    # 回归 b ) r! |/ o& F( L: N6 P
      w.grad.zero_()  
    4 F( n2 f7 y2 S2 k* ^# x% B6 c  b.grad.zero_()
    * ], e! y( @2 L( t- {5 D) x/ N9 T  Q* Y4 R4 V
    print(w.item(),b.item()) #结果8 R) N2 F9 u+ F$ x9 {
    $ L( h8 o, I, U. x6 V; ~
    Output: 27.26387596130371  0.49745178222656251 ]# l. T, c: x
    ----------------------------------------------
    # L8 W( i" I, {+ W最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    3 b- W5 v9 ]% t# R1 L8 Q高手们帮看看是神马原因?2 J9 l* r0 `0 h

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    + }2 c  j2 m5 i7 i' `/ R3 O" {  E' w3 `' \* w/ a* C
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?0 E& T, r0 X) ?; A6 u
    -------
    2 |* a1 A; @; [! O: b- Z/ y/ v! ~, L% ^不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    7 H, u) L" O1 L- v% }- C7 y-------1 g7 q7 c+ v4 c$ x4 B. M1 q
    算法诊断部分,建议把循环次数改为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
    * t8 f" ]* q) N8 Q! b2 F8 @7 ?( M没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?  z  ?3 D9 x( k- g. Z; c  d. m: }
    -------
    ! }/ d0 K4 R+ c: G) f' f% @/ }" f: e不好意思, ...

    . h8 `( [# i- c谢谢,算法应该没问题,就是最简单的线性回归。2 q. c* ~  c: W# |; G; A
    我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    0 j6 H- w# a9 g
    雷达 发表于 2023-2-14 21:52
    2 D0 }( T* \7 G& K" G% S+ d3 ~谢谢,算法应该没问题,就是最简单的线性回归。
    ( }* u0 z0 I7 Z) U/ T我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    " f0 e8 B! J# }9 X: p5 G: y- m! y; ~6 |, A; J4 F
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。
      @+ q7 U8 p8 X9 U  u5 X# i9 p, @9 C: k- U" o, ~
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 ( L( K# o+ |; X
    老福 发表于 2023-2-14 22:00" {1 a; @- B% ?) Q( g
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! u* K- x4 L) s/ d+ j

    3 ?+ }% J! }  C4 o6 [或者把b但的起点改为1试试。 ...
    - D! r: F* W2 y  X. j( g; J$ N
    & e- r5 w8 c3 }( e0 K: o
    你是对的。
    0 f% s. g& b. o' ^4 Q  ?去掉了随机部分  Q. N& H1 l- }
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)& t- M9 g  L( J! B& z5 \
    y = (x*27+15).reshape(-1)
    5 c  k7 O, g  Q+ L- i
    & F4 H# S, Z9 `7 M循环次数加成10倍,就看到 b 收敛了
      r  h$ K6 V: l# u4 t# @5 Tw , b
    2 U6 K2 t6 e* H+ L27.002620697021484 14.826167106628418, ^7 m7 F& v. J# u; w5 F' ]  s
      ~" V9 s% n  @( c; A. Y3 W; G
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-3-17 04:03 , Processed in 0.054454 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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