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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    目前正在做神经网络训练方面的学习,拿一份数据进行了练习,但是对数据进行处理之后,发现在训练过程中,误差随着迭代次数的增加也在增加,之后维持不变,请教各位大神,这可能是出于什么缘故?
    ; Q4 [0 w3 y, M1 b" y8 x3 `* v! Q, O具体代码如下:# t1 _$ J& ^' {" ^" ^  v3 L# W
        err = expectedOut'-out_out;. J1 C2 ]( v6 R/ T8 S/ P  m
        sse = sumsqr(err);
    . N7 Y# S! |+ O    errRec(i) = sse;                    %记录每次的错误
    " r$ v) x  s& ~1 V& }' x    fprintf('第%d次迭代  误差: %f\n',i,sse);( A" K3 n5 N5 M( f9 _

      r' ^$ j+ F1 g1 J& y( Z
    ( `# C0 k# T. Y. K其中,expectedOut是实际值,out_out是经过训练之后得到的结果3 W; ?5 Y' D5 i- L9 J
    然后,结果是这样:
    / S8 G" q% c1 U第1次迭代  误差: 2.124233
    / I. _0 l7 d  G* E1 V1 C- A! o第2次迭代  误差: 8.216954
    " T  I! ?* C, y( \4 x3 s6 @第3次迭代  误差: 6.639643, Y3 \7 h8 A& s  d" U" _: Q
    第4次迭代  误差: 27.220103
    8 a9 B  t4 u4 E% w" a6 a. l; ~第5次迭代  误差: 27.222127( S& l$ w& Z. I6 \. a0 J8 l
    第6次迭代  误差: 27.222127! L. H, Z8 W! Y( t
    第7次迭代  误差: 27.222127& A( K: h* I& @- `% X/ L
    第8次迭代  误差: 27.2221277 G* J, h6 ~3 q  [

      s" I( X5 a( `. v2 X之后误差一直维持不变,想了解一下这是出于什么缘故?是正常情况吗?/ a2 o0 w' f# y) A
    ' p: @; H# b% ]7 C  n( B
  • 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
    6 ]) |0 w, K# o: ^( g如果方便给更多一点代码会更容易理解
    2 j" g! y* D. u/ Y
    %开始迭代
    * k& U! R" {' v" Q; zfor i=1:maxiter
    0 g5 {' J( G' G- e4 r5 g    hid_input = net.w1 * SampInEx;                %3X100/ A( t/ l3 r* J  {) ]' R
        hid_out = logsig(hid_input);                  %3X100  
    2 K0 [. R6 f" |; k6 b% M* n5 p( r    ou_input1 = [hid_out;ones(1,nTrainNum)];      %4X100( w, f2 q) g/ K- T
        ou_input2 = net.w2 * ou_input1;               %1X100
    ; m) V. C9 v( n% l# n    out_out =logsig(ou_input2);                   %1X1003 j1 V: g7 s( p0 E; S, L2 _# o9 s
        out_Rec(:,i) = out_out;                       %记录每次的输出: ~3 n* a, f/ f8 V
        err = expectedOut'-out_out;! l% J  Y# _  K" G( w
        sse = sumsqr(err);
    ; E6 y% u7 r6 K* E    errRec(i) = sse;                    %记录每次的错误! s- n$ I7 Q) _# {/ }+ |: Y
        fprintf('第%d次迭代  误差: %f\n',i,sse);
    ' f3 Y' N% H" P8 m' y    iteration = iteration+1;" Y' }5 ~0 \2 R, u+ q3 H8 k8 h$ {8 N
       
      u, r; n$ j) A4 s    %判断是否收敛# X. p) T, v( m9 [: G7 d6 T$ m
        if sse<=eb
    " `( {/ Q) A, m# ?$ O        break;: P0 C, p# M( {5 D
        end
    7 Z7 k0 k/ y+ \1 D  O   5 S1 z' r3 n- y2 Z1 s8 l9 }
        %误差反向传播/ {! h. v* |+ \# H( ?& e
        %隐含层与输出层之间的局部梯度度( {( a: I3 N* L2 ^5 E
        DELTA = err.*dlogsig(ou_input2,out_out);
    1 M) B4 [  a0 t+ v+ j    %输入层与隐含层之间的局部梯度
    & x- Y( A  u0 C    delta = net.w2(:,1:end-1)'*DELTA.*dlogsig(hid_input,hid_out);& H" u2 _9 P: I. I& h' H1 E+ ~
        %权值修改量3 |! x# o: m. ?3 h- O4 @. Y
        dWEX=DELTA*ou_input1';
    : V) N- [& k; t. M7 B1 c# b1 U) |    dwex=delta*SampInEx';- T2 `4 R; J7 e* v7 b3 z/ D5 ^' h/ J
        %修改权值,如果不是第一次修改,则使用动量因子/ H5 u, A9 U% H+ P0 c8 L; q- A
        if i==1
    3 k7 g& K# b) V; w5 U7 T        net.w2 = net.w2+eta*dWEX;
    5 Y0 L: Q8 E2 r& K! x- }) q0 u; m1 J        net.w1 = net.w1+eta*dwex;9 n: V, w# {9 ~2 a7 \9 \+ `* ^) R3 r
        else* S% B7 T. u, \# |
            net.w2 = net.w2+(1-mc)*eta*dWEX+mc*dWEXOld;$ m8 h: H1 [! H6 k5 n4 V6 i1 B
            net.w1 = net.w1+(1-mc)*eta*dwex+mc*dwexOld;
    4 W! v, O8 k; S% p5 q( h% w    end
    8 ~9 @  U) g* E3 X- R% S   / m7 o% N$ b. m5 P0 J4 m+ r
        %记录上一次的权值修改量
    3 O+ R; ?" n8 _" x    dWEXOld = dWEX;
    + F, k2 X9 Z: X6 g) J9 R$ k0 X8 a    dwexOld = dwex;* b9 h9 ~: r8 g$ a6 Y3 F8 c
    end/ q* \4 w  G# A
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-5-28 06:05 , Processed in 0.078125 second(s), 27 queries , Gzip On.

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

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

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