BP神经网络逼近(matlab程序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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(e 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 = 86197 Ok = 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.1117 Ok1 = 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.0945 0.0945 当隐层神经元个数q=2时 epoch = 100000 Ok = Columns 1 through 10 0.3222 0.3112 0.3007 0.2910 0.2821 0.2741 0.2668 0.2603 0.2546 0.2495 Columns 11 through 19 0.2451 0.2413 0.2379 0.2351 0.2326 0.2305 0.2287 0.2271 0.2258 Ok1 = Columns 1 through 10 0.3222 0.2668 0.2379 0.2258 0.2211 0.2194 0.2187 0.2185 0.2184 0.2184 Columns 11 through 20 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184