找回密码
 注册
关于网站域名变更的通知
查看: 389|回复: 3
打印 上一主题 下一主题

迭代之后,误差反而越来越大的问题

[复制链接]
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2022-12-1 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    目前正在做神经网络训练方面的学习,拿一份数据进行了练习,但是对数据进行处理之后,发现在训练过程中,误差随着迭代次数的增加也在增加,之后维持不变,请教各位大神,这可能是出于什么缘故?
    6 b- n5 k$ x& K+ n具体代码如下:
    8 J( W* l, {) ?! }$ R6 }  Y    err = expectedOut'-out_out;. c+ s' y! j1 k( C6 B/ e3 b3 w9 m
        sse = sumsqr(err);- R' _9 i1 u# q8 @4 K3 `
        errRec(i) = sse;                    %记录每次的错误& o; b" f" K$ |
        fprintf('第%d次迭代  误差: %f\n',i,sse);, i5 Z4 s9 _. _' ^5 G% u( K/ n
      i+ O2 T, H; {

    - N8 V, k8 P/ W0 A* d+ s# ]其中,expectedOut是实际值,out_out是经过训练之后得到的结果
    8 ^- B8 k2 k6 n& g! {3 `然后,结果是这样:
    8 y) z6 m! e# Y, \6 n2 v; r第1次迭代  误差: 2.124233
    ! p6 f/ u: ^2 F: `7 I6 F( @- x第2次迭代  误差: 8.216954
    9 ~% d/ G9 {+ N3 f, q& S1 N6 C# q第3次迭代  误差: 6.639643$ N7 ]. [5 I8 H0 A* V5 ~
    第4次迭代  误差: 27.2201035 w9 Q- l6 m- Z6 f; z
    第5次迭代  误差: 27.222127
    7 U8 x" z2 }, \2 a: M  h第6次迭代  误差: 27.222127) k% x  J" @' q4 v+ x# i0 j1 J
    第7次迭代  误差: 27.222127
    0 N% j% K4 \) j/ A; ~0 u& c1 @/ N第8次迭代  误差: 27.222127; E# {0 f0 f  J; f3 I' ~' |  {

    6 q) w3 H2 o+ c, [9 {之后误差一直维持不变,想了解一下这是出于什么缘故?是正常情况吗?
    6 Y1 v2 C: Y* f* S$ y) x& F1 F6 i
    * {* L2 U+ O2 u/ z6 V9 L2 e/ \' k) `- n& h
  • TA的每日心情
    开心
    2022-1-24 15:10
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-12-1 13:12 | 只看该作者
    (1)判断条件是否有问题,不该迭代却迭代了;(2)迭代方向是否搞反了

    该用户从未签到

    3#
    发表于 2022-12-1 13:21 | 只看该作者
    如果方便给更多一点代码会更容易理解

    点评

    %开始迭代 for i=1:maxiter hid_input = net.w1 * SampInEx; %3X100 hid_out = logsig(hid_input); %3X100 ou_input1 = [hid_out;ones(1,nTrainNum)]; %4X1  详情 回复 发表于 2022-12-1 13:27
  • TA的每日心情
    开心
    2022-1-21 15:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
     楼主| 发表于 2022-12-1 13:27 | 只看该作者
    TEL15286598 发表于 2022-12-1 13:21. g7 l3 ]+ `5 R. \% O
    如果方便给更多一点代码会更容易理解
    % _6 j( S9 K* Y
    %开始迭代. ~2 F3 k0 f; g* A- ^5 b. [/ N$ V: c
    for i=1:maxiter  P- M& e; x/ G3 F% v, G. m  A* Q
        hid_input = net.w1 * SampInEx;                %3X100) v/ f/ T6 u# h+ f* o
        hid_out = logsig(hid_input);                  %3X100  
    & f7 F) i) J, z# s" ]    ou_input1 = [hid_out;ones(1,nTrainNum)];      %4X100( j4 c0 h" A3 t. D- O2 H- ?" E
        ou_input2 = net.w2 * ou_input1;               %1X100& H+ `0 W5 U0 R6 e' L! [
        out_out =logsig(ou_input2);                   %1X100
    - p# t( L# ^5 _/ l    out_Rec(:,i) = out_out;                       %记录每次的输出
    9 ^, D* o. ^' _. _+ @    err = expectedOut'-out_out;
    ! v- q0 N, u! H    sse = sumsqr(err);3 ?$ J" A- v& W$ U. r+ E: X$ W
        errRec(i) = sse;                    %记录每次的错误
    $ g6 T& ]& [! ?1 V4 m& A$ Z" F8 B    fprintf('第%d次迭代  误差: %f\n',i,sse);
    5 V/ ?: j3 Z$ ~" ]    iteration = iteration+1;$ O' S$ Y. U& C/ R6 q
       
    4 V; y( O4 h1 c: z4 ?2 m    %判断是否收敛
    0 _' l; F+ W. l/ y1 }    if sse<=eb$ w; ]( \/ s1 l  Q
            break;) ~% m$ _/ [2 x* E
        end& Z' G+ ?& W; `) b
       : h2 l2 ^4 s' ^* z
        %误差反向传播
    ) @* y% i+ ^, r! k7 E" A    %隐含层与输出层之间的局部梯度度$ L* `- k! [# R
        DELTA = err.*dlogsig(ou_input2,out_out);1 L0 s7 O& @" v& @, d; C7 r! g
        %输入层与隐含层之间的局部梯度! E' L6 ?' u* _2 P+ Y: S
        delta = net.w2(:,1:end-1)'*DELTA.*dlogsig(hid_input,hid_out);# m* O2 Z& ^. c9 O
        %权值修改量' i, O/ ], q7 X! X0 Q
        dWEX=DELTA*ou_input1';
    2 m  d: S0 H/ z3 n    dwex=delta*SampInEx';
    , h" B7 n6 F5 m" h% p# L) J    %修改权值,如果不是第一次修改,则使用动量因子! j# j6 ?- C: X
        if i==1: g# Y! [. k1 F
            net.w2 = net.w2+eta*dWEX;
    3 K, x* }; F+ S1 G  e        net.w1 = net.w1+eta*dwex;8 Q: ]* N: Y. M. f  A% o* k
        else& v; Z! ~3 q# @5 r- ^2 j
            net.w2 = net.w2+(1-mc)*eta*dWEX+mc*dWEXOld;
    ' Y: ~) _) H* ?4 E5 ^        net.w1 = net.w1+(1-mc)*eta*dwex+mc*dwexOld;( w7 Y8 `5 b, s6 W
        end
    & D% H- I: z, ?* R1 ~5 T# K" K* ]2 x   
      f' c6 g9 h4 B& \# C, f) |+ B    %记录上一次的权值修改量
    , Z$ Q% z4 \# F& }2 V$ W    dWEXOld = dWEX;
    * k* C2 v; a( C    dwexOld = dwex;7 O- j3 `8 m: e) U5 h  d- x
    end! B: ?: z/ v# t  x/ Z: j
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-1 13:02 , Processed in 0.125000 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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