www.gusucode.com > MATLAB编程萤火虫算法优化BP神经网络源码程序 > MATLAB编程萤火虫算法优化BP神经网络源码程序/bp训练模型集/main_bp.m

    clc
close all

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%!!输入数据input!!%%%%%%%%%%%%%%%%%%%
load C:\Users\Administrator\Desktop\bp训练模型集\p1.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p2.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p3.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p4.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p5.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p6.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p7.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p8.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p9.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p10.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p11.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p12.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p13.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p14.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p15.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p16.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p17.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p18.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p19.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p20.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p21.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p22.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p23.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p24.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p25.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p26.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p27.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p28.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p29.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p30.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p31.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p32.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p33.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p34.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p35.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p36.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p37.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p38.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p39.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p40.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p91.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p92.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p93.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p94.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\p95.txt;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%!!!输出数据output!!%%%%%%%%%%%%%%%%%%%%%%%

load C:\Users\Administrator\Desktop\bp训练模型集\t1.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t2.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t3.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t4.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t5.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t6.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t7.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t8.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t9.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t10.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t11.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t12.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t13.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t14.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t15.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t16.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t17.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t18.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t19.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t20.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t21.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t22.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t23.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t24.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t25.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t26.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t27.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t28.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t29.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t30.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t31.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t32.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t33.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t34.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t35.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t36.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t37.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t38.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t39.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t40.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t91.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t92.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t93.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t94.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\t95.txt;


%%%%%%%%%%%%%%%%%!!!加载合成数据!!!%%%%%%%%%%%%%%%%%%
%load C:\Users\Administrator\Desktop\bp训练模型集\合成数据模型\model1\model1.txt;
%load C:\Users\Administrator\Desktop\bp训练模型集\合成数据模型\model2\model2.txt;
load C:\Users\Administrator\Desktop\bp训练模型集\合成数据模型\model3\model3.txt;
%load C:\Users\Administrator\Desktop\bp训练模型集\合成数据模型\model4\model4.txt;


%%%%%%%%%%%%%%%%%!!整合输入向量!!%%%%%%%%%%%%%%%%%%%%
%t=[t91 t92 t93 t94 t95];
%p=[p91 p92 p93 p94 p95];
% p=[p12 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p13 p14 p15 p16 p17 p18 p19 p20 p21 p22 p23 p24 p25 p26 p27 p28 p29 p30 p31 p32 p33 p34 p35 p36 p37 p38 p40 p91 p92 p93 p94 p95];
% t=[t12 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t40 t91 t92 t93 t94 t95];
p=[model3 p1 p2 p3 p5 p4 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20 p21 p22 p23 p24 p25 p91 p92 p93 p94 p95];
%t=[t21 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t22 t23 t24 t25 t91 t92 t93 t94 t95];
t=[t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t91 t92 t93 t94 t95];


%%%%%%%%%%%%%%%%%%%!!保存输入输出向量!!%%%%%%%%%%%%%%%%%
save p.m;
save t.m;


%%%%%%%%%%%%%%%%%%!!!归一化!!!!%%%%%%%%%%%%%%%%%%%%
%p=p';
%t=t';
%数据归一化,利用mapminmax函数,使数值归一化到[-1.1]之间
%该函数使用方法如下:[y,ps] =mapminmax(x,ymin,ymax),x需归化的数据输入,
%ymin,ymax为需归化到的范围,不填默认为归化到[-1,1]
%返回归化后的值y,以及参数ps,ps在结果反归一化中,需要调用
[ppp,ps]=mapminmax(p,0,1);
[tt,ts]=mapminmax(t,0,1);
pp=ppp((1:195),(2:31));


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%!!训练参数设置!!%%%%%%%%%%%%%%%%%
%确定bp训练模型集,测试数据,这里一共输入5组数据,其中3组用来做bp训练模型集
%dividerand将总样本中的数据分成:bp训练模型集、变化数据、测试数据。不过是随机的分
% [trainsample.p,valsample.p,testsample.p] =dividerand(p,0.6,0.2,0.2); 
% [trainsample.t,valsample.t,testsample.t] =dividerand(t,0.6,0.2,0.2);
%%建立反向传播算法的BP神经网络,使用newff函数
%net = newff(minmax(p),[隐层的神经元的个数,输出层的神经元的个数],{隐层神经元
%传输函数,输出层的传输函数},'反向传播的训练函数'),其中p为输入数据,t为输出数据
%tf为神经网络的传输函数,默认为'tansig'函数为隐层的传输函数,
%purelin函数为输出层的传输函数
%一般在这里还有其他的传输的函数一般的如下,如果预测出来的效果不是很好,可以调节
%TF1 = 'tansig';TF2 = 'logsig';
%TF1 = 'logsig';TF2 = 'purelin';
%TF1 = 'logsig';TF2 = 'logsig';
%TF1 = 'purelin';TF2 = 'purelin';
TF1='tansig';TF2='purelin';
TF3='tansig';TF4='purelin';
%%%%%要根据情况调节隐含层层数以及每一个隐含层的神经元个数,效果不好时可以调节调节,尤其是validation check时
%net=newff(pp,tt,[1300,1300,1600,1600],{TF1 TF1 TF2},'trainrp');%网络创建
net=newff(pp,tt,[1300,1600,1600],{TF2 TF2 TF1},'trainrp');
%net=newff(p,t,[195 1960 1960],{TF1 TF2},'traingrp');


%%%%%%%%%%%%%%%%%%%%%!!网络参数的设置!!%%%%%%%%%%%%%%%%%%%%%%%%%%%%
net.trainParam.epochs=1000;%训练次数设置
net.trainParam.goal=1e-6;%训练目标设置
net.trainParam.lr=0.01;%学习率设置,应设置为较少值,太大虽然会在开始加快收敛速度,但临近最佳点时,会产生动荡,而致使无法收敛
net.trainParam.mc=0.9;%动量因子的设置,默认为0.9
net.trainParam.show=25;%显示的间隔次数
% 指定训练参数
% net.trainFcn = 'traingd'; % 梯度下降算法
% net.trainFcn = 'traingdm'; % 动量梯度下降算法
% net.trainFcn = 'traingda'; % 变学习率梯度下降算法
% net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法
% (大型网络的首选算法)
% net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最小
% 共轭梯度算法
% net.trainFcn = 'traincgf'; %Fletcher-Reeves修正算法
% net.trainFcn = 'traincgp'; %Polak-Ribiere修正算法,内存需求比Fletcher-Reeves修正算法略大
% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大
% (大型网络的首选算法)
%net.trainFcn = 'trainscg'; % ScaledConjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多
% net.trainFcn = 'trainbfg'; %Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快
% net.trainFcn = 'trainoss'; % OneStep Secant Algorithm,计算量和内存需求均比BFGS算法小,比共轭梯度算法略大
% (中型网络的首选算法)
%net.trainFcn = 'trainlm'; %Levenberg-Marquardt算法,内存需求最大,收敛速度最快
% net.trainFcn = 'trainbr'; % 贝叶斯正则化算法
% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm'
%在这里一般是选取'trainlm'函数来训练,其算对对应的是Levenberg-Marquardt算法
%net.divideFcn='';%取消validation check功能,validation check默认值是6,
net.trainFcn='trainrp';
%[net,tr]=train(net,trainsample.p,trainsample.t);
[net,tr]=train(net,pp,tt);   %将p1、t1的全部数据用来训练数据,而不是其中一部分,为了保持数据一一对应
%计算仿真,其一般用sim函数
% [normtrainoutput,trainPerf]=sim(net,trainsample.p,[],[],trainsample.t);%训练的数据,根据BP得到的结果
% [normvalidateoutput,validatePerf]=sim(net,valsample.p,[],[],valsample.t);%验证的数据,经BP得到的结果
% [normtestoutput,testPerf]=sim(net,testsample.p,[],[],testsample.t);%测试数据,经BP得到的结果
%将所得的结果进行反归一化,得到其拟合的数据
% trainoutput=mapminmax('reverse',normtrainoutput,ts);
% validateoutput=mapminmax('reverse',normvalidateoutput,ts);
% testoutput=mapminmax('reverse',normtestoutput,ts);
%正常输入的数据的反归一化的处理,得到其正式值
% trainvalue=mapminmax('reverse',trainsample.t,ts);%正常的验证数据
% validatevalue=mapminmax('reverse',valsample.t,ts);%正常的验证的数据
% testvalue=mapminmax('reverse',testsample.t,ts);%正常的测试数据
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%数据预测,输入要预测的数据pnew
% load C:\Users\Administrator\Desktop\bp训练模型集\pmodel2.txt;
% save pmodel1.m;
% pnew=pmodel2;
% pnewn=mapminmax(pnew);
% anewn=sim(net,pnewn);
% anew=mapminmax('reverse',anewn,ts);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%dnewn=p91;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%!!仿真及反归一化!!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dnewn=ppp((1:195),1);
%ddnewn=mapminmax(dnewn,0,1);
res=sim(net,dnewn);
realres=mapminmax('reverse',res,ts);
errors=t91-realres;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



%%%%%%%%%%%%%%%%%%%%%%%%%!!相关图像绘制!!%%%%%%%%%%%%%%%%%%%%%%%%%%%
%计算绝对误差的计算
% errors=trainvalue-trainoutput;
% %绘制拟合图
% figure,plotregression(trainvalue,trainoutput)
% %绘制误差图
% figure,plot(1:length(errors),errors,'-b')
% title('误差变化图')
% %误差值的正态性的检验
% figure,hist(errors);%频数直方图
% figure,normplot(errors);%Q-Q图
% [muhat,sigmahat,muci,sigmaci]=normfit(errors); %参数估计 均值,方差,均值的0.95置信区间,方差的0.95置信区间
% %figure, ploterrcorr(errors);%绘制误差的自相关图


%%%%%%%!!本段代码用于提取pp相应坐标点位的数据!!!%%%%%%%
%本段代码用于提取pp相应坐标点位的数据
load C:\Users\Administrator\Desktop\bp训练模型集\实测数据\coordinate.txt;
save coordinate.m;
x=coordinate(:,1);
y=coordinate(:,2);
%f=coordinate(:,3);
f=realres;
x1=0:0.1:37.5;
y1=0:0.1:20;
[X,Y,Z]=griddata(x',y,f,x1,y1','nearest');
%figure;


%%%%%%%%%%%%%%%%%%%!!!成像!!!%%%%%%%%%%%%%%%%%
%contourf(X,Y,Z,40);
%pcolor(Z);
imagesc(Z);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%figure_export_1();
% %[x_location,y_location,res_value]=textread('C:\Users\Administrator\Desktop\zc\gaochengzuobiao.txt'); 
% [x_location,y_location]=textread('C:\Users\Administrator\Desktop\zc\hangcizuobiao.txt');
% len=length(x_location);
% 
% 
% for i=1:len;
%     %v_want(i)=interp2(X,Y,Z,x_location(i),y_location(i));
%     %xx(i)=x_location(i);
%     value_want(i)=interp2(X,Y,Z,x_location(i),y_location(i));
% end
% res_value=value_want';