《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 468|回复: 0
收起左侧

[提问] BP神经网络预测过程中,误差增加到一定程度后不变了

[复制链接]
发表于 2017-8-15 19:20:05 | 显示全部楼层 |阅读模式
利用BP神经网络进行预测,在训练过程中,发现误差随着迭代次数的增加而增加,增加到一定程度后维持不变,直到超过迭代次数而退出,这是因为什么啊?
迭代过程代码如下:
%开始迭代
for i=1:maxiter
    hid_input = net.w1 * SampInEx;                %3X100
    hid_out = logsig(hid_input);                  %3X100  
    ou_input1 = [hid_out;ones(1,nTrainNum)];      %4X100
    ou_input2 = net.w2 * ou_input1;               %1X100
    out_out =logsig(ou_input2);                   %1X100
    out_Rec(:,i) = out_out;                       %记录每次的输出
    err = expectedOut'-out_out;
    sse = sumsqr(err);
    errRec(i) = sse;                    %记录每次的错误
    fprintf('第%d次迭代  误差: %f\n',i,sse);
    iteration = iteration+1;
   
    %判断是否收敛
    if sse<=eb
        break;
    end
   
    %误差反向传播
    %隐含层与输出层之间的局部梯度度
    DELTA = err.*dlogsig(ou_input2,out_out);   %dlogsig(ou_input2,out_out)为1X100,最后结果也为1X100
    %输入层与隐含层之间的局部梯度
    delta = net.w2(:,1:end-1)'*DELTA.*dlogsig(hid_input,hid_out);
    %权值修改量
    dWEX=DELTA*ou_input1';
    dwex=delta*SampInEx';
    %修改权值,如果不是第一次修改,则使用动量因子
    if i==1
        net.w2 = net.w2+eta*dWEX;
        net.w1 = net.w1+eta*dwex;
    else
        net.w2 = net.w2+(1-mc)*eta*dWEX+mc*dWEXOld;
        net.w1 = net.w1+(1-mc)*eta*dwex+mc*dwexOld;
    end
   
    %记录上一次的权值修改量
    dWEXOld = dWEX;
    dwexOld = dwex;
end
请教各位大神,这是出于什么缘故啊?什么会影响权值的变化?
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-8-5 13:14 , Processed in 0.047266 second(s), 10 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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