文档详情

BP神经网络逼近(matlab程序).docx

发布:2017-08-13约2.48千字共4页下载文档
文本预览下载声明
BP神经网络逼近y=1/x,MATLAB程序%BP神经网络逼近y=1/x;%----------------定义必要的变量方便调试--------------------clear;clc;q=8; %神经元个数max_epoch=100000; %最大训练次数err_goal=0.01; %期望误差最小值alpha =0.01; %学习率X = 1:0.5:10; %样本D=1./X; %期望值[m,n] = size(X); %m为输入个数,n为样本数量l=1; %单输出wjk = rand(l,q); %隐层到输出层的初始权值vij = rand(q,m); %输入层到隐层的初始权值for epoch=1:max_epoch %-------------------------前向传播求输入-------------------- NETj=vij*X; %隐层净输入 Yj=1./(1+exp(-NETj)); %计算隐层输出 NETk=wjk*Yj; %输出层净输入 Ok=1./(1+exp(-NETk));%计算输出层输出e=((D-Ok)*(D-Ok))/2; %计算误差函数E(epoch)=e;if(eerr_goal) char=达到输出误差要求学习结束 break;end%-------------------反向传播调权值-------------------------------%调整输出层权值deltak=Ok.*(1-Ok).*(D-Ok);wjk=wjk+alpha*deltak*Yj;%调整隐含层权值deltai=Yj.*(1-Yj).*(deltak*wjk);vij=vij+alpha*deltai*X;end%-----------------取样本测试---------------------------------Xx = 1:3:66;D1 = 1./Xx; %期望输出[m1,n1] = size(Xx);NETj1=vij*Xx; %隐层净输入Yj1=1./(1+exp(-NETj1)); %计算隐层输出NETk1=wjk*Yj1; %输出层净输入Ok1=1./(1+exp(-NETk1));%计算输出层输出%-----------------------显示与绘图---------------------------------epoch %显示样本集计算次数Ok %显示训练集输出层输出Ok1 %显示测试集输出层输出subplot(2,2,1);plot(X,D,b-o); %样本与期望值title(训练集网络样本)subplot(2,2,2);plot(X,Ok,b-o,X,D,r-x);%训练集网络输出与期望值title(训练集网络输出与期望值)subplot(2,2,3);plot(1:1:epoch,E,k*); %显示误差title(训练集输出误差)subplot(2,2,4);plot(Xx,Ok1,b-o,Xx,D1,r-x); %绘制样本及网络输出title(测试集网络输出与期望值)运行结果当隐层神经元个数q=8时char =达到输出误差要求学习结束epoch = 86197Ok = Columns 1 through 10 0.8717 0.7039 0.5349 0.4121 0.3313 0.2775 0.2398 0.2120 0.1908 0.1741 Columns 11 through 19 0.1608 0.1499 0.1410 0.1337 0.1276 0.1225 0.1183 0.1147 0.1117Ok1 = Columns 1 through 10 0.8717 0.2398 0.1410 0.1117 0.1013 0.0972 0.0956 0.0950 0.0947 0.0946 Columns 11 through 20 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 Columns 21 through 22 0.094
显示全部
相似文档