用遗传算法优化 BP 神经网络的 Matlab 编程实例(转)
由于 BP 网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利
用 Matlab 遗传算法工具箱。以下贴出的代码是为一个 19 输入变量,1 个输出变量情况下
的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。
程序一:GA 训练 BP 权值的主函数
function net=GABPNET(XX,YY)
% 使用遗传算法对 BP 网络权值阈值进行优化,再用 BP 算法训练网络
%数据归一化预处理
nntwarn off
XX=[1:19;2:20;3:21;4:22]';
YY=[1:4];
XX=premnmx(XX);
YY=premnmx(YY);
YY
%创建网络
net=newff(minmax(XX),[19,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;%种群规模
save data2 XX YY % 是将 xx,yy 二个变数的数值存入 data2 这个 MAT-file,
initPpp=initializega(popu,aa,'gabpEval');%初始化种群
gen=100;%遗传代数
%下面调用 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-');
评论2