1、GABP程序GA-BP程序(总19页)例1【原创】用遗传算法优化BP神经网络的Matlab编程实例font=楷体size=4color=blue此文章首次在simwe公开发表属于GreenSim团队原创作品,转载请注明!/color/size/fontfont=楷体size=4color=#0000ff更多原创程序,请访问GreenSim团队主页url=font=楷体size=4color=blue/color/size/fontfont=楷体size=4color=blue由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代
2、码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。/color/size/font程序一:GA训练BP权值的主函数function net=GABPNET(XX,YY)%-%使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络%-%数据归一化预处理nntwarn offXX=premnmx(XX);YY=premnmx(YY);%创建网络net=newff(minmax(XX),19,25,1,tansig,tansig,purelin,trainlm);%下面使用遗传算法对网络进行优化P=XX;T=YY;R=size(P,1
3、);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=100;%遗传代数%下面调用gaot工具箱,其中目标函数定义为gabpEvalx,endPop,bPop,trace=ga(aa,gabpEval,initPpp,1e-6 1 1,maxGenTerm,gen,.normGeomSelect,arithXover,2,nonUnifMutation,2 gen 3);%绘收敛
4、曲线图figure(1)plot(trace(:,1),1./trace(:,3),r-);hold onplot(trace(:,1),1./trace(:,2),b-);xlabel(Generation);ylabel(Sum-Squared Error);figure(2)plot(trace(:,1),trace(:,3),r-);hold onplot(trace(:,1),trace(:,2),b-);xlabel(Generation);ylabel(Fittness);%下面将初步得到的权值矩阵赋给尚未开始训练的BP网络W1,B1,W2,B2,P,T,A1,A2,SE,val
5、=gadecod(x);2,1=W1;3,2=W2;2,1=B1;3,1=B2;XX=P;YY=T;%设置训练参数%训练网络net=train(net,XX,YY);程序二:适应值函数function sol, val = gabpEval(sol,options)% val - the fittness of this individual% sol - the individual, returned to allow for Lamarckian evolution% options - current_generationload data2nntwarn offXX=premnmx(
6、XX);YY=premnmx(YY);P=XX;T=YY;R=size(P,1);S2=size(T,1);S1=25;%隐含层节点数S=R*S1+S1*S2+S1+S2;%遗传算法编码长度for i=1:S, x(i)=sol(i);end;W1, B1, W2, B2, P, T, A1, A2, SE, val=gadecod(x);程序三:编解码函数function W1, B1, W2, B2, P, T, A1, A2, SE, val=gadecod(x)load data2nntwarn offXX=premnmx(XX);YY=premnmx(YY);P=XX;T=YY;R=
7、size(P,1);S2=size(T,1);S1=25;%隐含层节点数S=R*S1+S1*S2+S1+S2;%遗传算法编码长度% 前R*S1个编码为W1for i=1:S1, for k=1:R, W1(i,k)=x(R*(i-1)+k); endend% 接着的S1*S2个编码(即第R*S1个后的编码)为W2for i=1:S2, for k=1:S1, W2(i,k)=x(S1*(i-1)+k+R*S1); endend% 接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1for i=1:S1, B1(i,1)=x(R*S1+S1*S2)+i);end% 接着的S2个编码(即第
8、R*S1+S1*S2+S1个后的编码)为B2for i=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; % 遗传算法的适应值注意:上面的函数需要调用gaot工具箱,请从附件里下载!例2 遗传优化BP改动的地方看书童上传的m文件,如下% 程序说明% 主程序:% 适应度函数:% 编解码子函数:% 使用前需安装gaot工具箱,上述三个文件需放在同一文件夹中且将该文件夹% 设置为当前工作路径% 运行程序
9、时只需运行主程序即可% 此程序仅为示例,针对其他的问题,只需将数据修改即可,但需注意变量名% 保持一致,尤其是全局变量修改时(在和中也要修改)% 版权归MATLAB中文论坛所有,转载请注明% 清除环境变量clear allclcwarning off nntwarn off% 声明全局变量global p % 训练集输入数据global t % 训练集输出数据global R % 输入神经元个数global S2 % 输出神经元个数global S1 % 隐层神经元个数global S % 编码长度S1=25;% 导入数据% 训练数据day= ; ; ; ; ; ; ;% 数据归一化dayn,
10、minday,maxday=premnmx(day);% 输入和输出样本p=dayn(:,1:8);t=dayn(:,2:9);% 测试数据k= ; ; ; ; ; ; ;% 数据归一化kn=tramnmx(k,minday,maxday);% BP神经网络% 网络创建net=newff(minmax(p),S1,7,tansig,purelin,trainlm); % 设置训练参数% 网络训练net,tr=train(net,p,t);% 仿真测试s_bp=sim(net,kn); % BP神经网络的仿真结果% GA-BP神经网络R=size(p,1);S2=size(t,1);S=R*S1
11、+S1*S2+S1+S2;aa=ones(S,1)*-1,1;popu=50;% 种群规模initPpp=initializega(popu,aa,gabpEval);% 初始化种群gen=100;% 遗传代数% 调用GAOT工具箱,其中目标函数定义为gabpEvalx,endPop,bPop,trace=ga(aa,gabpEval,initPpp,1e-6 1 1,maxGenTerm,gen,.normGeomSelect,arithXover,2,nonUnifMutation,2 gen 3);% 绘均方误差变化曲线figure(1)plot(trace(:,1),1./trace(
12、:,3),r-);hold onplot(trace(:,1),1./trace(:,2),b-);xlabel(Generation);ylabel(Sum-Squared Error);% 绘制适应度函数变化figure(2)plot(trace(:,1),trace(:,3),r-);hold onplot(trace(:,1),trace(:,2),b-);xlabel(Generation);ylabel(Fittness);% 计算最优的权值和阈值W1,B1,W2,B2,val=gadecod(x);1,1=W1;2,1=W2;1=B1;2=B2;% 利用新的权值和阈值进行训练ne
13、t=train(net,p,t);% 仿真测试s_ga=sim(net,kn); %遗传优化后的仿真结果另外说明下,假如我要做识别类的优化,比如用遗传神经网络识别手写体字母,那 p:训练集输入数据t : 训练集输出数据R:输入神经元个数S2 : 输出神经元个数S1: 隐层神经元个数S : 编码长度这些数据都应该是多少,我识别的是图片,训练数据和测试数据都应该是什么附件c:iknowdocsharedatacur_work&k=1a9440b882d673bc8fffd8438209a721&t=10 (4 KB) 2010-5-22 18:08, 下载次数: 0 书童给的ga_bp哦基于Mat
14、lab神经网络工具的BP网络实例(注释很详细) 神经网络, Matlab, 实例, 注释, 工具1.clear2.clc3.close all4.warning off5.%数据输入6.huanghe_p=370 503 434 575 490 420 560 640 558 343 326 405 446 423 422 697 598 377 435 472 451 667 601 689 541 485 425 389 382 707 422;7.huanghe_t=515 713 586 753 720 567 717 987 810 489 453 589 639 568 595 9
15、82 849 519 615 652 599 941 893 999 758 701 630 561 520 1040 535;8.9.%归一化处理10.p=(huanghe_p-min(huanghe_p)/(max(huanghe_p)-min(huanghe_p);11.t=(huanghe_t-min(huanghe_t)/(max(huanghe_t)-min(huanghe_t);12.13.%网络有关参数14.EPOCHS=10000;15.GOAL=;16.LR=;17.MAX_FAIL=100;18.19.%建立bp神经网络,并训练,仿真。其中输入为p,输出为t20.21.%
16、-隐层神经元确定-22.23.s=3:15;%s 为常向量,表示神经元的个数24.res=zeros(size(s);%res将要存储误差向量,这里先置零25.26.pn=p(1:5);p(6:10);p(11:15);p(16:20);27.tn=t(1:5);t(6:10);t(11:15);t(16:20);28.for i=1:length(s)29.%版本使用下面代码30.%输出层的神经元个数必须等于tn的行数31.%每层的传递函数可以自己指定32.%创建了2层网路,隐层s(i)(任意);输出层4(由tn决定不可改,但需输入)33.%net=newff(minmax(pn),s(i)
17、,4,tansig,purelin,trainlm);34.%35.%版本使用下面的代码36.%输出层神经元由tn决定,不需要输入,我们只需要确定输入层和隐层的神经元个数37.%所有层的传递函数都可以自己定义38.%创建3层网络,输入层8(任意);隐层s(i)(任意);输出层4(由tn决定,不可改,不需要输入)39.%40.%其实两个版本的区别在于的bp网络创建函数直接给出了t,故最后一层不需要指定了,故相同的参数时,的会多一层41.%=newff(pn,tn,4,s(i),tansig,tansig,purelin,trainlm); 43.1,1=zeros(size1,1)+;44.2,
18、1=zeros(size2,1)+;45.1,1=zeros(size1,1)+;46.2,1=zeros(size2,1);47. =GOAL;48.选取最优神经元数,number为使得误差最小的隐层神经元个数49.ttmp2,ind=min(res);50.no=s(ind);51.52.%选定隐层神经元数目后,建立网络,训练仿真。53.%版本54.%net=newff(minmax(pn),no,4,tansig,purelin,trainlm);55.%版本=newff(pn,tn,4,no,tansig,tansig,purelin,trainlm); 57.1,1=zeros(si
19、ze1,1)+;58.2,1=zeros(size2,1)+;59.1,1=zeros(size1,1)+;60.2,1=zeros(size2,1);61. =GOAL;62.为网络的误差向量63.r=norm(error);%r为网络的整体误差64.save net %保存最好的网络65.%预测66.input=p(11:15);p(16:20);p(21:25);p(26:30);67.yuce=sim(net,input);68.69.%结果反归一化70.y_norm=y(1, y(2, y(3, y(4,;71.yuce_norm=yuce(1, yuce(2, yuce(3, yu
20、ce(4,;72.%训练数据的仿真结果73.t_val=y_norm*(max(huanghe_t(1:20)-min(huanghe_t(1:20)+min(huanghe_t(1:20);74.%预测数据的仿真结果75.yuce=yuce_norm*(max(huanghe_t(1:20)-min(huanghe_t(1:20)+min(huanghe_t(1:20);76.77.%计算误差78.%训练数据仿真的相对误差79.wucha=abs(t_val-huanghe_t(1:20)./huanghe_t(1:20);80.b=minmax(wucha);81.average_wucha=mean(wucha);82.%作图83.figure(1)84.plot(1:20,huanghe_t(1:20),*-,1:20,t_val,o:)85.title(训练数据仿真结果)86.legend(原始数据,仿真结果)87.88.figure(2)89.plot(1:20,huanghe_t(11:30),*-,1:20,yuce,o:)90.title(预测数据仿真结果)91.legend(原始数据,仿真结果)复制代码下载 KB)2009-5-30 21:02下载 KB)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1