设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 # d0 {) m% V7 B( A  l

    . j+ z6 q# m- ]' _为预防老年痴呆,时不时学点新东东玩一玩。
    / s" A& s6 o/ Z5 PPytorch 下面的代码做最简单的一元线性回归:& U4 y7 }- u9 S: H( Y! ?* A
    ----------------------------------------------
    8 G4 h6 U3 {% x$ E/ ?. Dimport torch5 g8 `: Y- G1 d1 c, N
    import numpy as np8 A5 {1 [' `1 O6 N9 x1 m" l
    import matplotlib.pyplot as plt
    : F3 }, |5 j1 r5 ]import random
    4 I' L# \, {$ C- E3 H1 w% U: G. a& k( n6 e$ U, Z
    x = torch.tensor(np.arange(1,100,1))
      A/ N& z: X" d2 |4 ly = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    ) ]) j* z4 z1 ^" z* N4 B: y1 G- P- @$ d
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ; n/ A9 Y8 X/ k% ]" D/ S! T8 s/ Xb = torch.tensor(0.,requires_grad=True)6 s2 Z8 ]% T0 k, j

    5 z  P9 I! O0 a" H2 g( x2 J& Qepochs = 100
    , {# b; I. f* c9 ]
    5 _: l# t/ q- n1 g* Alosses = []0 o2 ^+ ?5 S% T0 {( [4 B4 L9 H
    for i in range(epochs):
    % k  K8 p8 y0 W1 F8 F  y_pred = (x*w+b)    # 预测3 @1 u2 w: B% E0 M
      y_pred.reshape(-1)
    $ n3 t" Z) F. C6 k- F$ M7 [ + I) \0 M& i% _+ b- |
      loss = torch.square(y_pred - y).mean()   #计算 loss
    ( g  n# _8 C' d! Z1 a3 I2 e5 _% |  losses.append(loss)0 }1 W" U5 M2 ?% e8 t; h0 z
      
    . W7 q; Y& x: v# Y4 E  loss.backward() # autograd
    + w: F: M) q% Z5 d, ?. y/ v  with torch.no_grad():. S" O0 B! G$ ~1 Q
        w  -= w.grad*0.0001   # 回归 w3 L) O* h* l1 Z5 h
        b  -= b.grad*0.0001    # 回归 b
    : x' \& u) o* b6 {  w.grad.zero_()  
    2 X6 o( h8 Z- `2 A6 J  l# a  b.grad.zero_()
    / V, W# f/ L8 N8 K" A1 `3 R, b* a+ `2 r8 x
    print(w.item(),b.item()) #结果$ J! s* |% i, h5 R* c4 P+ z$ P  s

    : V# d* v( w7 nOutput: 27.26387596130371  0.4974517822265625( k) x' [- h! P. a
    ----------------------------------------------4 I( G6 \$ |& t1 U/ n7 `. a% Z
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。1 l7 Q8 m1 `- K3 j! _5 D: T0 R# X
    高手们帮看看是神马原因?+ r0 T/ z' ~. |. `% N

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    4 i, F1 C  w7 y1 K, f9 \
    # ?' _0 u: b  Y4 z4 L7 G没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    4 x3 i& h# f8 {# a-------7 a& Z+ D% ?! L7 ~/ t
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。+ y0 m  u+ w$ p. c9 f: I7 \
    -------8 v* P. F/ m( k9 G* t
    算法诊断部分,建议把循环次数改为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
    ; `! {/ d" g/ }8 M. i/ F没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?8 K9 Z( E  d  O0 c# g
    -------
    4 L! B3 C& a+ o# C$ G7 H, s不好意思, ...

    5 O. _9 ?8 Y* C6 E( k- {谢谢,算法应该没问题,就是最简单的线性回归。
    # k" C& A3 B- z: m" g- ~8 n" _我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    - a! F8 |6 K3 ~2 d9 s* r
    雷达 发表于 2023-2-14 21:52
    1 P0 q. b; b- o8 d谢谢,算法应该没问题,就是最简单的线性回归。
    ; L/ X! l% I. J2 R1 \# s我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    * A& F$ N! V. b! ~. ^6 d

    - v% ~( P: W0 }. j1 }& v刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。0 j4 Z+ I2 d; o" c/ m
    ) `* \8 y( @- G+ k- Q
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    , O2 R* T8 ~- H" G# r
    老福 发表于 2023-2-14 22:00
    % m: P5 P7 b0 e8 I0 B+ g& S1 ?刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。7 F; k$ B( D" A+ D
    : P; m% U) f5 J1 B4 j' K1 _! P' N; H
    或者把b但的起点改为1试试。 ...

    & M- P  H3 |" ^3 I& A6 I
    & }- }5 m6 N4 h% H! O3 q2 i你是对的。
    ; {% {& v" \5 |! p: h$ z去掉了随机部分
    8 x3 g. ?2 a/ K6 s8 B$ \#y = (x*27+15+random.randint(-2,3)).reshape(-1)4 p. h9 y( e: P8 A4 X
    y = (x*27+15).reshape(-1)
    # b3 w* n/ Y! c+ N1 s( M1 l- _
      o3 q4 S1 K" h6 c0 B! E循环次数加成10倍,就看到 b 收敛了
    ( A& s. `$ ~4 v, G$ e0 \5 sw , b
    : a/ O& P* m; M! k6 y( a' {% N! s27.002620697021484 14.826167106628418
    . ]3 ~/ b; {8 w2 G* O3 I4 P$ a! h7 j- u3 n& N  P' x  f* x  s
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-6-22 03:45 , Processed in 0.064022 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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