📄 gabpnet.asv
字号:
%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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -