三层BP网络随着训练样本增多 收敛变慢的问题

新手学习神经网络 matlab写程序 直接上程序 希望有大神能帮我改进程序加快收敛速度



rdw1=0;
rdw2=0;


data=get(handles.uitable1,'Data');%%获取训练样本和期望输出


pp=data(:,1:ni);%%提取输入
[m,n]=size(pp);%%  m 训练样本数 n 输入维数
t=data(:,ni+1:ni+no);%%提取期望输出
tt=t;
for i=1 :m
    for j=1:no
        t(i,j)=(t(i,j)-tmin(j))/(tmax(j)-tmin(j));
    end
end
t=t';
for i=1 :m
    for j=1:ni
       p(i,j)=(pp(i,j)-pmin(j))/(pmax(j)-pmin(j));
    end
end


p=p';


sam1=[p;ones(1,m)];
for i=1:a
in1=wb1*sam1;
out1=logsig(in1);       %%输入层-隐藏层 传递函数logsig
sam2=[out1;ones(1,m)];
in2=wb2*sam2;
out2=logsig(in2);      %%隐藏层-输出层 传递函数purelin
out3=out2';
for ii=1 :m
    for jj=1:no
        out(ii,jj)=out3(ii,jj)*(tmax(jj)-tmin(jj))+tmin(jj);
    end
end
err=tt-out;             %%计算误差
mse1 = mse(err);      %%误差函数 sse mse=sse/m
fprintf('第 %d 次迭代   误差:  %f\n', i, mse1);
 if mse1<=b||i==a  
     %%判断是否收敛
     set(handles.uitable2,'Data',out);
set(handles.uitable3,'Data',err);
set(handles.uitable5,'Data',wb1(1:d,1:ni));
set(handles.uitable6,'Data',wb1(1:d,ni+1));
set(handles.uitable7,'Data',wb2(1:no,1:d));
set(handles.uitable8,'Data',wb2(1:no,d+1));
        break;
 end 
 
 %%误差反向传播
 delta2=err'.*dlogsig(in2,out2);%%隐藏层-输出层 局部梯度
 delta1=wb2(:,1:end-1)'*delta2.*dlogsig(in1,out1);%%输入层-隐藏层 局部梯度
 %%权值修改量
 dw2=delta2*sam2';
 dw1=delta1*sam1';
 %%修改权值 引入动量因子避免陷入局部最小值
 if i==1
   wb2=wb2+c*dw2;
   wb1=wb1+c*dw1;
 else
   wb2=wb2+(1-e)*c*dw2 + e*rdw2;
   wb1=wb1+(1-e)*c*dw1 + e*rdw1;
    %%wb2=wb2+c*dw2 + e*rdw2;
   %%wb1=wb1+c*dw1 + e*rdw1;
 end
 %%记录上一次权值修改量
 rdw2=dw2;
 rdw1=dw1;
end

你可能感兴趣的:(BP,神经网络,matlab,收敛速度慢)