设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑 5 ~( s3 d! a( T* `4 ^

    3 \& ?) w: b/ o! c$ ~- {为预防老年痴呆,时不时学点新东东玩一玩。' b% o& Q' d5 w# E1 K. U( K
    Pytorch 下面的代码做最简单的一元线性回归:
    * i9 _, \9 W* b& B) n----------------------------------------------
    8 `: M9 Q5 h5 J* s% }( }import torch
    9 c* _% Y' E* Kimport numpy as np4 T' M+ e3 @8 Y3 k( c* b1 x+ ~
    import matplotlib.pyplot as plt
    $ a+ p  q# X5 ~) x& @0 V% E6 himport random0 p: {; H% _5 u0 W* G

    3 M/ y, h  `$ \  R, @x = torch.tensor(np.arange(1,100,1))
    ) Z7 [( k/ Z# f1 p& {0 V3 q" w" Hy = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15
    6 b9 N: k8 b1 d4 B7 y* `  {2 {# ?2 |+ d3 w
    w = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    ; Q# ]8 u1 x9 K* x: A2 q' _2 vb = torch.tensor(0.,requires_grad=True)
    " C( x( m' ~# J" J
    : f, a  O; Z1 C+ Gepochs = 100
    * t( F; v2 U4 ~# R
    ! h0 i' p# ^6 Ulosses = []
    4 e2 V2 I; u+ |for i in range(epochs):2 v2 h* J+ {" J6 H" r
      y_pred = (x*w+b)    # 预测
    8 c2 |9 X) J3 R4 j2 h/ A# r  y_pred.reshape(-1)- V9 r- r; B8 ]% Z9 S0 z1 c
    3 P' ^( d+ L! o& q, _0 o0 ?3 i! I
      loss = torch.square(y_pred - y).mean()   #计算 loss3 K7 d8 w0 X4 H2 U, s2 \# D8 w% E
      losses.append(loss)
    3 ?" H& [% T3 k+ C+ M4 t  
    2 i* E: k6 v+ c& u8 u6 q% g  loss.backward() # autograd8 D3 c; ~+ f8 m2 w. J! h
      with torch.no_grad():
    0 v! R1 v! F, G- L    w  -= w.grad*0.0001   # 回归 w* ]/ Y+ n, E: j# j+ @# I
        b  -= b.grad*0.0001    # 回归 b
    : ]7 c) {" g& N- Q1 H" \4 w  w.grad.zero_()  # O+ \( S1 r  W2 G& j# \
      b.grad.zero_()2 V5 ?' \$ ~$ p& \- {1 o: L

    : u7 J7 h3 g, l; vprint(w.item(),b.item()) #结果
    # ?" n( T9 q* b6 h
      K0 n, S- o5 S& g7 z6 @. FOutput: 27.26387596130371  0.49745178222656250 A" c# n' u% m( ?
    ----------------------------------------------# f# Z* W. `) t1 y2 C$ _
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。
    ! V$ i4 Z; k. V, f- |! }1 X# T高手们帮看看是神马原因?# j4 f' {; ~$ s5 J( s: \

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑 : f; j8 E: c2 G
    ( B1 @% I  v4 X8 f* u* S6 Z
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    + i- ^+ N* h6 @( {7 U& B-------
    * `8 ~- \! s+ \. t; \不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。# ^8 s+ S9 x* k: I- r9 J0 B6 Z# S' @
    -------  w9 ^, R/ }5 W! k5 n) z) P4 ^
    算法诊断部分,建议把循环次数改为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
    : H! e4 k# [7 o$ M, H没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?
    % R. B8 c. |! S; t8 N/ G& c-------! u9 |% _) \1 ^* ]9 M* x
    不好意思, ...

    * }) J. h8 G, d, N  P5 `! F谢谢,算法应该没问题,就是最简单的线性回归。
    , w5 B  n. e0 o8 r5 V- z5 r. O我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    ; C4 d6 h, q5 s) S/ [6 b8 n& q
    雷达 发表于 2023-2-14 21:52; g7 U* V  N0 N  X- g7 V% g
    谢谢,算法应该没问题,就是最简单的线性回归。1 s. J* ~. E# P6 o
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...
    & U: I1 C1 t( _7 d, j
    1 M; S2 i+ j; V- d7 z3 r+ d- e0 Y7 a
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。1 }- H( c, |0 M$ K2 z
    $ [- E# m( Q, f2 I0 w
    或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑
    9 Y' ?2 L% A1 f9 u4 Q6 f0 f, h
    老福 发表于 2023-2-14 22:00
    " K9 F9 p! @' {6 L# r7 g刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。6 d/ z4 U# z3 a7 j1 P& P
    : ^( L1 O) _6 i! o% L+ Y
    或者把b但的起点改为1试试。 ...
    0 j  X6 U2 d; o8 r# [) m$ ]) V

    0 f9 ]% h/ P' B  z你是对的。$ B* `  D) {! s+ y1 ~# H
    去掉了随机部分
    ! A( I. z0 Z# C' L( A( O) K1 l#y = (x*27+15+random.randint(-2,3)).reshape(-1)4 Z9 Z2 t! M& l2 U0 \3 D5 i
    y = (x*27+15).reshape(-1)' z, F2 a7 d0 m6 H7 ]( o4 M; f7 x! A
    3 q9 c2 s9 J4 h! m5 ^
    循环次数加成10倍,就看到 b 收敛了
      m* F1 k, {& O8 T( H5 D- Lw , b
    7 t1 t: j; P- c; z0 f3 ^! @; L7 f& j# K27.002620697021484 14.826167106628418
    " s7 x' I/ ]3 f8 w5 V. `6 E5 u7 N  [5 X9 x1 C( [+ \5 z4 o  S& C
    和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-9-6 12:35 , Processed in 0.060253 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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