实验一、BP 及RBF 神经网络逼近
一、实验目的
1、了解MATLAB 集成开发环境
2、了解MATLAB 编程基本方法
3、熟练掌握BP 算法的原理和步骤
4、掌握工具包入口初始化及调用
5、加深BP、RBF 神经网络对任意函数逼近的理解
二、实验内容
1、MATLAB 基本指令和语法。
2、BP 算法的MATLAB 实现
三、实验步骤
1、熟悉MATLAB 开发环境
2、输入参考程序
3、设置断点,运行程序,观察运行结果
四、参考程序
1. BP算法的matlab实现程序
%lr为学习步长,err_goal期望误差最小值,max_epoch训练的最大次数,隐层和输岀层初值为零lr=0.05; err_goal=0.0001; max_epoch=10000;
a=0.9;
Oi=0;
Ok=0;
%两组训练集和目标值
X=[1 1;-1 -1;1 1];
T=[1 1;1 1];
%初始化wki , wij ( M为输入节点j的数量;q为隐层节点i的数量;L为输岀节点k的数量) [M,N]=size(X); q=8;
[L,N]=size(T);
wij=rand(q,M);
wki=rand(L,q);
wij0=zeros(size(wij)); wki0=zeros(size(wki));
for epoch=1:max_epoch
% 计算隐层各神经元输岀
NETi=wij*X;
for j=1:N
for i=1:q Oi(i,j)=2/(1+exp(-NETi(i,j)))-1;
end
end
% 计算输出层各神经元输出NETk=wki*Oi;
for i=1:N
for k=1:L Ok(k,i)=2/(1+exp(-NETk(k,i)))-1;
end
end
% 计算误差函数E=((T-Ok)'*(T-Ok))/2;
if (E end % 调整输出层加权系数deltak=Ok.*(1-Ok).*(T-Ok); w=wki; wki=wki+lr*deltak*Oi'; wki0=w; % 调整隐层加权系数deltai=Oi.*(1-Oi).*(deltak'*wki)'; w=wij; wij=wij+lr*deltai*X'; wij0=w; end epoch % 显示计算次数 %根据训练好的wki ,wij 和给定的输入计算输出X1=X; %计算隐层各神经元的输出NETi=wij*X1; for j=1:N for i=1:q Oi(i,j)=2/(1+exp(-NETi(i,j)))-1; end end %计算输出层各神经元的输出NETk=wki*Oi; for i=1:N for k=1:L Ok(k,i)=2/(1+exp(-NETk(k,i)))-1; end end Ok % 显示网络输出层的输出 2、BP逼近任意函数算法的matlab实现程序 X=-4:0.08:4; T=1.1*(1-X+2*X.A2).*exp(-X.A2./2); net=newff(minmax(X),[20,1],{'tansig','purelin'}); net.trainParam.epochs=15000; net.trainParam.goal=0.001; net=train(net,X,T); X1=-1:0.01:1; y=sim(net,X1); figure; plot(X1,y,'-r',X,T,':b','LineWidth',2); 3.RBF能够逼近任意的非线性函数 X=-4:0.08:4; T=1.1*(1-X+2*X.A2).*exp(-X.A2./2); net=newrb(X,T ,0.002,1); X1=-1:0.01:1; y=sim(net,X1); figure; plot(X1,y,'-r',X,T ,':b','LineWidth',3); 五、思考题 1. 将结果用图画出。 2?假设训练样本X=[1 -1;1 -1;-1 1] ,目标输出T=[1 1;1 1],建立一个3个输入,单隐层8个神经元,输出层2个神经元的网络结构,其中隐层、输出层神经元的传递函数均为sigmoid函数, (1)试利用BP学习算法实现该网络的训练过程; ( 3)观察两种学习算法的运行结果,比较两种算法的优缺点。