您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 用遗传算法优化BP神经网络程序
红色程序是用遗传算法直接训练BP权值tic,%开始计时[P,T,R,S1,S2,S]=nninit;%BP网络初始化%随机生成W1,B1,W2,B2[W1,B1]=rands(S1,R);[W2,B2]=rands(S2,S1);%BP网络训练的参数设置disp_fqre=100;max_epoch=3000;err_goal=0.002;lr=0.01;TP=[disp_fqremax_epocherr_goallr];%开始训练[W1,B1,W2,B2,te,tr]=trainbp(W1,B1,'tansig',W2,B2,'purelin',P,T,TP);%仿真结果TT=simuff(P,W1,B1,'tansig',W2,B2,'purelin')toc%结束计时%在MATLAB6.5下编程tic,%开始计时[P,T,R,S1,S2,S]=nninit;%BP网络初始化%生成BP网络net=newff(minmax(P),[S1S2],{'logsig''logsig'},'trainlm');%BP网络训练的参数设置net.trainParam.epochs=3000;net.trainParam.goal=0.002;net.trainParam.lr=0.01;%开始训练net=train(net,P,T);%仿真结果TT=sim(net,P)toc%结束计时%遗传算法的适应值计算function[sol,val]=gabpEval(sol,options)%val-thefittnessofthisindividual%sol-theindividual,returnedtoallowforLamarckianevolution%options-[current_generation][P,T,R,S1,S2,S]=nninit;fori=1:S,x(i)=sol(i);end;[W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x);tic,%开始计时%首先进行遗传算法[P,T,R,S1,S2,S]=nninit;aa=ones(S,1)*[-11];popu=30;initPpp=initializega(popu,aa,'gabpEval');gen=80;%遗传代数%遗传计算[xendPopbPoptrace]=ga(aa,'gabpEval',[],initPpp,[1e-611],'maxGenTerm',gen,...'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2gen3]);%xThebestfound%Letstakealookattheperformanceofthegaduringtherunsubplot(2,1,1)plot(trace(:,1),1./trace(:,3),'r-')holdonplot(trace(:,1),1./trace(:,2),'b-')xlabel('Generation');ylabel('Sum-SquaredError');subplot(2,1,2)plot(trace(:,1),trace(:,3),'r-')holdonplot(trace(:,1),trace(:,2),'b-')xlabel('Generation');ylabel('Fittness');%下面进行BP算法figure(2)%将遗传算法的结果分解为BP网络所对应的权值、阈值[W1B1W2B2PTA1A2SEval]=gadecod(x);%BP网络训练的参数设置disp_fqre=100;max_epoch=3000;err_goal=0.002;lr=0.01;TP=[disp_fqremax_epocherr_goallr];[W1,B1,W2,B2,te,tr]=trainbp(W1,B1,'tansig',W2,B2,'purelin',P,T,TP);%仿真结果TT=simuff(P,W1,B1,'tansig',W2,B2,'purelin')toc%结束计时%将遗传算法的编码分解为BP网络所对应的权值、阈值function[W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x)[P,T,R,S1,S2,S]=nninit;%前R*S1个编码为W1fori=1:S1,fork=1:R,W1(i,k)=x(R*(i-1)+k);endend%接着的S1*S2个编码(即第R*S1个后的编码)为W2fori=1:S2,fork=1:S1,W2(i,k)=x(S1*(i-1)+k+R*S1);endend%接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1fori=1:S1,B1(i,1)=x((R*S1+S1*S2)+i);end%接着的S2个编码(即第R*S1+S1*S2+S1个后的编码)为B2fori=1:S2,B2(i,1)=x((R*S1+S1*S2+S1)+i);end%计算S1与S2层的输出A1=tansig(W1*P,B1);A2=purelin(W2*A1,B2);%计算误差平方和SE=sumsqr(T-A2);val=1/SE;%遗传算法的适应值%用GA训练BP网络的权值、阈值tic,%开始计时[P,T,R,S1,S2,S]=nninit;%BP网络初始化aa=ones(S,1)*[-11];popu=60;%初始种群个数initPpp=initializega(popu,aa,'gabpEval');gen=700;%遗传代数[xendPopbPoptrace]=ga(aa,'gabpEval',[],initPpp,[1e-611],'maxGenTerm',gen,...'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2gen3]);%%Letstakealookattheperformanceofthegaduringtherunsubplot(2,1,1)plot(trace(:,1),1./trace(:,3),'r-')holdonplot(trace(:,1),1./trace(:,2),'b-')xlabel('Generation');ylabel('Sum-SquaredError');subplot(2,1,2)plot(trace(:,1),trace(:,3),'r-')holdonplot(trace(:,1),trace(:,2),'b-')xlabel('Generation');ylabel('Fittness');%从编码x中解码出BP网络所对应的权值、阈值[W1B1W2B2]=gadecod(x);%仿真结果TT=simuff(P,W1,B1,'tansig',W2,B2,'purelin')toc%结束计时%BP网络初始化:给出网络的训练样本P、T,%输入、输出数及隐含神经元数R,S2,S1function[P,T,R,S1,S2,S]=nninitp=[00000;10001;01001;00100;00010];P=p';t=[0000;1000;0100;0010;0001];t=t';T=t;[R,Q]=size(P);[S2,Q]=size(T);S1=6;S=R*S1+S1*S2+S1+S2;%遗传算法编码长度
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:用遗传算法优化BP神经网络程序
链接地址:https://www.777doc.com/doc-5106094 .html