gabpnet.asv

来自「本人调试的大作业(源程序模型+论文)」· ASV 代码 · 共 68 行

ASV
68
字号
%function net=GABPNET(XX,YY)
%--------------------------------------------------------------------------
%  GABPNET.m
%  使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络
%--------------------------------------------------------------------------
%数据归一化预处理

XX=[1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000...
0.9996    0.9794    0.8912    0.7325    0.5326    0.3285    0.1535    0.0276...
-0.0445   -0.0700   -0.0630   -0.0391   -0.0119    0.0099    0.0222    0.0249...
0.0206    0.0126    0.0042   -0.0026   -0.0065   -0.0077   -0.0068   -0.0047...
-0.0023   -0.0003    0.0010    0.0015    0.0015    0.0010    0.0005   -0.0000...
-0.0004   -0.0005   -0.0005   -0.0004   -0.0002   -0.0000    0.0001    0.0001...
0.0001    0.0001    0.0001    0.0000   -0.0000   -0.0000   -0.0000   -0.0000...
-0.0000   -0.0000];
YY=[ 0.3800    0.3800    0.3801    0.3803    0.3818    0.3889    0.4247    0.4731...
0.5441    0.6253    0.6832    0.6985    0.6848    0.6552    0.6230    0.5971...
0.5816    0.5765    0.5794    0.5867    0.5950    0.6019    0.6061    0.6076...
0.6068    0.6048    0.6024    0.6004    0.5990    0.5984    0.5984    0.5988...
0.5994    0.5999    0.6003    0.6005    0.6005    0.6004    0.6002    0.6001...
0.5999    0.5999    0.5999    0.5999    0.5999    0.6000    0.6000    0.6000...
0.6000    0.6000    0.6000    0.6000    0.6000    0.6000    0.6000    0.6000...
0.6000    0.6000];
%创建网络
net=newff([-1 1],[1,25,1],{'tansig','tansig','purelin'},'trainlm');
%下面使用遗传算法对网络进行优化
P=XX;
T=YY;
R=size(P,1);
S2=size(T,1);
S1=25;%隐含层节点数
S=R*S1+S1*S2+S1+S2;%遗传算法编码长度
aa=ones(S,1)*[-1,1];
popu=50;%种群规模
initPpp=initializega(popu,aa,'gabpEval');%初始化种群
gen=300;%遗传代数
%下面调用gaot工具箱,其中目标函数定义为gabpEval
[x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,...
  'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
%绘收敛曲线图
figure(1)
plot(trace(:,1),1./trace(:,3),'r-');
hold on
plot(trace(:,1),1./trace(:,2),'b-');
xlabel('Generation');
ylabel('Sum-Squared Error');
figure(2)
plot(trace(:,1),trace(:,3),'r-');
hold on
plot(trace(:,1),trace(:,2),'b-');
xlabel('Generation');
ylabel('Fittness');
%下面将初步得到的权值矩阵赋给尚未开始训练的BP网络
[W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x);
net.LW{2,1}=W1;
net.LW{3,2}=W2;
net.b{2,1}=B1;
net.b{3,1}=B2;
XX=P;
YY=T;
%设置训练参数
net.trainParam.show=1;
net.trainParam.lr=1;
net.trainParam.epochs=3000;
net.trainParam.goal=0.0001;
%训练网络
net=train(net,XX,YY);
gensim(net,-1)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?