设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 ( S% |9 R! u  R6 T: H
    2 r/ a* C/ W- Q1 w5 g
    为预防老年痴呆,时不时学点新东东玩一玩。* O- u0 N3 ^* P& A/ }  V
    Pytorch 下面的代码做最简单的一元线性回归:
    ' o# o* T" l) b% ]1 x8 @5 u: i----------------------------------------------
    / N# J. N% W& V) qimport torch
    5 [& g8 o% A# d! F$ }$ p! uimport numpy as np
    4 T6 e3 d  f( D5 [import matplotlib.pyplot as plt1 x8 k2 S/ M: z2 m: r- J' A
    import random6 E9 w) ^. e) m( F, J* U" }1 d

    6 z4 b$ \4 m0 p  n, f% fx = torch.tensor(np.arange(1,100,1))
    . A# w8 N! W0 b' T2 e) [. [y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15. o; b+ K  |! U  g6 I

    % i' J8 E% n; o. b5 ^! ?; c: Aw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    . t+ u- n; ?( F# Yb = torch.tensor(0.,requires_grad=True)
    % {9 x4 `9 Z/ }& X2 G  s
    ! E4 U# P  m* j5 K* s1 Uepochs = 1006 z% B: h- g1 Y( M% t+ J6 w
    4 J9 ]! M) i8 Y
    losses = []; k9 t0 R- T/ w+ h! H
    for i in range(epochs):
    : m8 S6 A! u! w/ h0 ]! x  y_pred = (x*w+b)    # 预测
    8 f8 G4 h4 z0 g& _  J! Q% K  y_pred.reshape(-1)
    - R* x: i1 Y+ P$ Z3 L
    1 j3 V, ^3 _3 T, D" g; }! L' U  loss = torch.square(y_pred - y).mean()   #计算 loss
    - w4 S/ G7 A. R. Y% L; j  losses.append(loss)- Q5 T/ g, p" b  T
      ) p6 p$ c; g9 P* }" k: y
      loss.backward() # autograd
    " ]" \, K- H3 ^  with torch.no_grad():
    $ r, S$ {: f' I/ F/ X    w  -= w.grad*0.0001   # 回归 w
    ! i" I  W) n' Q% I" E3 m" r7 D. N    b  -= b.grad*0.0001    # 回归 b 6 Z# @3 u8 Z9 F
      w.grad.zero_()  + W- A& e6 F/ E$ [; N
      b.grad.zero_()$ |+ P0 z8 L7 F1 h* A
    0 p8 K' ]6 I9 P. J3 l
    print(w.item(),b.item()) #结果
    . h% R7 ]- E4 ^* Z) ?: n4 `& ~" i1 J8 v) N* J5 T# ^6 s" _
    Output: 27.26387596130371  0.4974517822265625$ p" V* v( H& B8 x. l& ]) Y4 I8 m6 }5 M
    ----------------------------------------------
      Q0 K) N+ z* e/ a6 l9 f最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    . ~' L  [' t* V, Y/ E7 ~高手们帮看看是神马原因?0 @* U8 i* ^8 x

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    : T. V( m- m1 g. J& O/ J: z( Y8 r' ]) p: {
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?. S! K2 j& |6 x5 W9 r% l
    -------6 V5 b; e; U9 G) U' `# A0 L4 i
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。  F4 y! h; \4 U% K3 I
    -------
    2 f0 B! B) f4 o1 S/ p" R  r# M# K算法诊断部分,建议把循环次数改为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
      m( i0 j/ z8 X, B, r1 P& ~没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?2 P( s! T# s1 }0 R) Q3 ]
    -------) R( D4 U" b  D& j2 S* p
    不好意思, ...
    / [1 Q6 h6 d) o6 t. T+ W
    谢谢,算法应该没问题,就是最简单的线性回归。
    6 E( p2 O  d1 {% v5 ?我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑 * N; M8 C) A9 Q6 K# m' D
    雷达 发表于 2023-2-14 21:52/ P1 P7 {$ a! U9 V4 w; D
    谢谢,算法应该没问题,就是最简单的线性回归。
    . L9 ^( _; F& i2 s我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    7 C9 s8 K4 G$ E( _
    4 }# C" C, U  b: D) f( J$ z0 S
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。! W2 b$ i% P' a/ I6 h
    ; l3 L/ P8 V! D, h! l
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 . |4 j. J2 J$ o$ P7 V2 l, i
    老福 发表于 2023-2-14 22:00
    ( l% f- g1 D* g2 ^1 t5 e- D. |刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。' {. E1 s, T/ W, A. Z

    , `" V7 o( m4 y' ~; Z+ u9 r& _或者把b但的起点改为1试试。 ...
    5 \' l# N4 s" ^: s
      V3 N$ e% n" y
    你是对的。- L) x7 [, e& X+ N9 b; f
    去掉了随机部分4 @. [6 t8 Q! Y& s0 j$ ]# c
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)
    4 ]1 y+ A9 Z8 d7 Sy = (x*27+15).reshape(-1)
    * e" R8 n7 _# W& ]$ L7 T# N; I+ W$ l6 G+ i4 Q) w  l
    循环次数加成10倍,就看到 b 收敛了
    . ]4 b* x* ?1 A. @, Jw , b
    / W! B) A1 k( R  X27.002620697021484 14.826167106628418
    9 T! ^% C% A" Z5 x1 O/ u- c* Z6 ]
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-2-26 08:15 , Processed in 0.054429 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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