找回密码
 注册
查看: 352|回复: 3
打印 上一主题 下一主题

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    目前正在做神经网络训练方面的学习,拿一份数据进行了练习,但是对数据进行处理之后,发现在训练过程中,误差随着迭代次数的增加也在增加,之后维持不变,请教各位大神,这可能是出于什么缘故?+ q; Z" k4 b: S* ~( i
    具体代码如下:
    & U- s0 C) _6 z4 F: \    err = expectedOut'-out_out;
    ' `* [/ }2 r+ b; d7 ]    sse = sumsqr(err);
    ! j; v* B/ U7 a4 {6 W4 j    errRec(i) = sse;                    %记录每次的错误! q6 E% k1 D6 G: ]
        fprintf('第%d次迭代  误差: %f\n',i,sse);2 Y6 u$ R2 f' w
    ; U/ E0 O  R2 ?! t+ W
    8 U! o9 b) s! ]% K$ _
    其中,expectedOut是实际值,out_out是经过训练之后得到的结果
    2 V- V- d! m( y& y8 [  k9 u然后,结果是这样:- ?& g' r/ k- O$ v, j' g
    第1次迭代  误差: 2.124233
    $ t+ c7 I* S6 e' T0 N第2次迭代  误差: 8.216954
    / ]: n  e9 A1 m# a) H, B第3次迭代  误差: 6.639643
    7 i7 z+ |+ Z& [7 V第4次迭代  误差: 27.2201035 h- V1 H9 Z% U
    第5次迭代  误差: 27.222127
    ; z( J: n$ o# M, N第6次迭代  误差: 27.222127
    % B; q* l3 i" \, x第7次迭代  误差: 27.222127
    : `9 w% m9 b0 E7 _/ [2 C; i  m- T第8次迭代  误差: 27.222127
    7 _2 {( K/ \1 g5 l. K* i6 T
    " l1 u; N6 }, \# N之后误差一直维持不变,想了解一下这是出于什么缘故?是正常情况吗?, w0 V, u9 k8 H& N# n0 h, e6 g

    1 u6 _1 v7 q' Z% `6 n3 D. d% P5 I
  • 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:213 ~0 V# V  p1 c/ X( \
    如果方便给更多一点代码会更容易理解
    $ D5 D& g6 g! O1 P: v! o/ @
    %开始迭代8 K9 L: v: _( n& q
    for i=1:maxiter
    7 F/ J- z5 z- _0 x2 g7 E    hid_input = net.w1 * SampInEx;                %3X1000 h, R. ~* [$ k3 V: h1 X+ H
        hid_out = logsig(hid_input);                  %3X100  . M/ v0 G, x. R
        ou_input1 = [hid_out;ones(1,nTrainNum)];      %4X100. O' Q8 n* V/ r5 s. c4 D2 S* Y, T
        ou_input2 = net.w2 * ou_input1;               %1X100+ p, A1 C' q4 }! o7 x
        out_out =logsig(ou_input2);                   %1X100
    % r) t  u2 \# O7 {9 D( b    out_Rec(:,i) = out_out;                       %记录每次的输出% P0 {* o% v$ c" A; N0 H
        err = expectedOut'-out_out;" `* l* I) u! B" Q' t6 H
        sse = sumsqr(err);( V; p" t% D- ]. `8 i; [
        errRec(i) = sse;                    %记录每次的错误: _) f4 S- G6 a2 O
        fprintf('第%d次迭代  误差: %f\n',i,sse);
    9 R5 I- s& I* h/ O. K# x* J$ A    iteration = iteration+1;6 p3 p" l4 {- b0 |% I) K
       ) \* D  |2 Y9 T- Z% T4 E) u# f5 _8 _2 j
        %判断是否收敛
    ( Y$ c2 U7 y" b$ a. J: g* U! O8 \    if sse<=eb
    ; K1 \; Y( e8 a, R% v" ~3 C        break;/ e6 d% ^) a9 |7 o/ O1 S( R
        end
    $ _) {+ Y" o. F1 L" P! {( P   , F" y3 T- }# V" ?5 G0 C& z8 R$ P/ r
        %误差反向传播
    + h: ~" y' B( a% n8 c2 v+ T0 L    %隐含层与输出层之间的局部梯度度1 Y: e1 h2 }% Z/ v, v$ f4 B' [3 v
        DELTA = err.*dlogsig(ou_input2,out_out);$ d4 U- Z7 k$ P+ {
        %输入层与隐含层之间的局部梯度
    - A2 Q6 |) Q9 x+ t3 F    delta = net.w2(:,1:end-1)'*DELTA.*dlogsig(hid_input,hid_out);
    , B7 R. A' Y9 A1 w* _2 Z    %权值修改量$ v  E. u; ]. `7 c5 o
        dWEX=DELTA*ou_input1';
    9 y9 X1 m, l2 g1 g5 v+ T    dwex=delta*SampInEx';# [, S$ I. Y4 m0 R; X/ \
        %修改权值,如果不是第一次修改,则使用动量因子
    % `3 M& c  @; b2 c' t    if i==1" B. q9 D- K2 O# E1 Z# i- o
            net.w2 = net.w2+eta*dWEX;
    7 b3 Q$ o# d$ k! Y) Q# F( ~. w& l# \        net.w1 = net.w1+eta*dwex;
    + n7 g( y6 g- O- v& O    else
    - Q7 S: g- M0 C9 Q, Z0 _        net.w2 = net.w2+(1-mc)*eta*dWEX+mc*dWEXOld;
    + K. v9 U: b& h, w! F6 O% x" c        net.w1 = net.w1+(1-mc)*eta*dwex+mc*dwexOld;
    # F' N3 p5 ]4 S; V; ?9 H    end
    + B: W# _2 B0 ^- e# q   
    2 ?& y8 L. f8 `, T    %记录上一次的权值修改量/ W" C# f. \  R# I2 L
        dWEXOld = dWEX;
    : H& `, `3 E* O' U' s- f    dwexOld = dwex;
    ( _( O4 y- S+ _, i+ V2 y' z) wend
    7 M/ u# n0 x4 v
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-5-30 01:36 , Processed in 0.078125 second(s), 24 queries , Gzip On.

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

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

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