设为首页收藏本站

爱吱声

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

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

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

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

    [LV.10]大乘

    跳转到指定楼层
    楼主
     楼主| 发表于 2023-2-14 13:09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 雷达 于 2023-2-14 13:12 编辑
    / ^6 b$ h+ P: G. `
    ; K2 {* w8 K) Q3 t# O. L- g为预防老年痴呆,时不时学点新东东玩一玩。
    7 P! B9 }4 ^4 u! J$ [0 aPytorch 下面的代码做最简单的一元线性回归:) v5 U0 z3 o. D3 `% a' r& n4 G
    ----------------------------------------------9 U" y8 b; E6 t  j+ H8 C. a
    import torch$ Q$ d- A/ y! x
    import numpy as np
    * i) |4 R3 o: Z3 F$ g/ P  O1 ~import matplotlib.pyplot as plt* @6 @* t- h. d2 H7 L
    import random- O) k( {8 L$ h8 H

    $ j8 y, v) m9 y$ e( Hx = torch.tensor(np.arange(1,100,1))* k, S2 U# p( E: O9 }: S7 J3 r+ U
    y = (x*27+15+random.randint(-2,3)).reshape(-1)  # y=wx+b, 真实的w0 =27, b0=15, [2 Z6 \; |3 M8 Z  a

    + I% o, ?* a" p) F  i4 Pw = torch.tensor(0.,requires_grad=True)  #设置随机初始 w,b
    3 S1 M) z) F/ {. G& v8 G( Kb = torch.tensor(0.,requires_grad=True)
      p. U' i* A( ~; E+ R3 ^: c2 \
    , H+ W" w# J2 o+ xepochs = 100
    - I- q$ Y6 |  t/ ?6 m, x6 b7 S& H+ d8 `# f
    losses = []
    0 W) X7 V9 y" z7 yfor i in range(epochs):9 h; [1 ^/ R2 ?  @" u
      y_pred = (x*w+b)    # 预测
    ! X- H$ J4 L' l$ ^) _5 ^# _0 @  y_pred.reshape(-1)
    % B3 A% b; M8 w) n6 E# w * {- o  R8 J! v9 h
      loss = torch.square(y_pred - y).mean()   #计算 loss
    , O7 K7 L5 E- L( e6 i7 [  losses.append(loss)1 k/ `9 k9 R6 U9 h) Z( f
      1 u" D/ F* @5 X7 W
      loss.backward() # autograd
    : n. U8 t0 y  o- l4 G; f, z  with torch.no_grad():# k- N( V4 b4 ?2 u5 d
        w  -= w.grad*0.0001   # 回归 w8 A+ q6 |5 w; l- M. s
        b  -= b.grad*0.0001    # 回归 b
    7 F& c" o- f; i& Q  w.grad.zero_()  
    ! c$ ]3 H( ]; D9 p- @# @  b.grad.zero_()
    5 V4 o6 g  c& E4 d% H3 ]/ K+ i! ~8 w- z4 w& b2 R- e
    print(w.item(),b.item()) #结果
    $ `" C7 N; b! L) \
    5 ]- T7 Y5 i; u# P: QOutput: 27.26387596130371  0.4974517822265625
    3 ]# R3 V9 z) |6 k7 l+ s9 {5 S: j) ?----------------------------------------------- z+ q: u' b2 }4 c  n
    最后的结果,w可以回到 w0 = 27 附近,b却回不去 b0=15。两处红字,损失函数是矢量计算后的均值,感觉 b 的回归表达有问题。: G9 N* l2 s# ~& ]
    高手们帮看看是神马原因?2 r% U' \& R9 A  w

    评分

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

    查看全部评分

    该用户从未签到

    沙发
    发表于 2023-2-14 19:23:02 | 只看该作者
    本帖最后由 老福 于 2023-2-14 21:58 编辑
    . @+ _* p) R# j, R
    9 i: G' l% e" s  H9 b2 Q没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?3 S3 c9 a& e, ^$ f' @' X) W6 R! f
    -------- G2 M# s. \8 a! m" l. ]7 g
    不好意思,再看一遍,好像你在自算回归而不是用现成的工具直接出结果,上面的评论只有一点用,就是确认是不是算法有问题。
    ) \$ Y4 U( Z' ~& `  x/ k-------' R! e7 \% I1 i& 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+ E" \! G0 r0 _
    没有用过pytorch,但你把随机噪音部分改成均值为0的正态分布再试试看是不是符合预期?9 I+ @+ D4 J9 T
    -------- V' L. ~( q+ q; E
    不好意思, ...

    $ _, w% c, x3 m7 s; y3 V谢谢,算法应该没问题,就是最简单的线性回归。
    " m' L# z% q- n: i$ L( y5 j, r8 {4 {我特意没有用现成的工具,就是想从最基本的地方深入理解一下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    地板
    发表于 2023-2-14 22:00:48 | 只看该作者
    本帖最后由 老福 于 2023-2-14 22:02 编辑
    " L# @7 ^7 s$ Q8 u4 h6 _
    雷达 发表于 2023-2-14 21:52; h  N" U* D( X6 D4 m
    谢谢,算法应该没问题,就是最简单的线性回归。- P) p' B8 L' N8 C" V" s
    我特意没有用现成的工具,就是想从最基本的地方深入理解 ...

    : i' V1 w9 C) \6 o
    / F8 V& v7 t  Y; S( h刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。" k# ?) g6 Q+ B* ?* Y

    2 }5 [$ E( ?0 p! y. u或者把b但的起点改为1试试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    [LV.10]大乘

    5#
     楼主| 发表于 2023-2-15 00:25:26 | 只看该作者
    本帖最后由 雷达 于 2023-2-15 00:31 编辑 % c! F' u3 l5 G4 r5 ~
    老福 发表于 2023-2-14 22:00  Z# N/ B6 z( F) I! A( R% O
    刚才更新了一下,建议增加循环次数或调一下步长,查一下loss曲线。) G9 h3 t9 U8 o- V# V. Q4 E

    5 I- f# w% G8 o! R或者把b但的起点改为1试试。 ...

    # S$ f# C1 a& M+ L+ J4 u! \0 ~* O
    " N4 v6 J4 w7 h4 A1 l4 Z. I你是对的。: f  v: u8 l. Z; _0 Z) ]8 D
    去掉了随机部分% i/ L" B' z- m8 F" Q
    #y = (x*27+15+random.randint(-2,3)).reshape(-1)9 f1 ^) i3 J0 E
    y = (x*27+15).reshape(-1)
    ( l/ `4 k) z) S; w$ \
    & M* e/ p# N1 L6 i$ A3 d1 ?循环次数加成10倍,就看到 b 收敛了
    8 i4 o7 A5 G3 I) Y& a. x7 _' n, Dw , b5 c. J; d  i" ?
    27.002620697021484 14.826167106628418& L7 w* l7 V  U- P0 K' u- ^7 Q+ M

    2 A. r  J! o6 p* F和 b 的起始位置无关,但 labeled data 用 y = (x*27+15+random.randint(-2,3)).reshape(-1) ,收敛就很慢。
    回复 支持 反对

    使用道具 举报

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

    GMT+8, 2026-5-14 01:28 , Processed in 0.059733 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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