资源描述:
《BP算法的matlab程序实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、智能控制导论实验一(神经网络)1.实验题目:利用多层前向传播神经网络来逼近非线性函数y0.5(1cosx)。2.实验目的:通过自己编写程序掌握BP学习算法,并对人工神经网络的非线性映射能力有一个深入了解。3.实验要求:1.训练算法采用传统的BP学习算法。2.模型结构采用1-6-1型(即输入层取1,隐层取6,输出层取1)。3.样本集在这里取20点,即x2i/20,i0,1,,19,y0.5(1cosx)4.要求所编程序得到的仿真结果为:一是能显示均方误差的变化趋势,二是要显示出此非线性函数y0.5(
2、1cosx)和它的逼近曲线。4.实验算法(BP算法):给定20组样本x1,t1;x2,t2;;x20,t20。这里xi为一维输入矢量,yi为一维期望输出矢量i1,2,,p,,20。假设矢量yi为网络的实际输出。则训练过程为:1.确定神经网络结构为1-6-1型,选Emax作为最大容许误差,并给出隐层到输出层的权矩阵W0,输入层到隐层的权矩阵V0,将其初始化为某一小的随机权矩阵。2.依次输入样本xi,计算网络的实际输出yi。23.计算误差E[ty/2]E,i1,2,,p,,
3、20。ii4.计算各层权值的变化量5.调节权值6.若p20,则pp1,转2),否则转7)。7.若EEmax,结束,否则E0,p1,转2)进入下一轮的计算,若直到规定的次数时还没有使EEmax,则强行退出,终止程序。5.实验步骤:1.了解并掌握神经网络BP算法2.通过给定的样本,利用BP算法,编写MATLAB语言,实现仿真,得出相应的仿真曲线。3.撰写实验报告。6.实验程序:fori=1:20%样本个数xx(i)=2*pi*(i-1)/20;d(i)=0.5*(1+cos(xx(i)));endn=le
4、ngth(xx);%样本个数p=6;%隐层个数w=rand(p,2);wk=rand(1,p+1);max_epoch=10000;%最大训练次数error_goal=0.002;%均方误差q=0.09;%学习速率a(p+1)=-1;%training%此训练网络采取1-6-1的形式,即一个输入,6个隐层,1个输出forepoch=1:max_epoche=0;fori=1:n%样本个数x=[xx(i);-1];neto=0;forj=1:pneti(j)=w(j,1)*x(1)+w(j,2)*x(2);a(j)=
5、1/(1+exp(-neti(j)));%隐层的激活函数采取s函数,f(x)=1/(1+exp(-x))neto=neto+wk(j)*a(j);endneto=neto+wk(p+1)*(-1);y(i)=neto;%输出层的激活函数采取线性函数,f(x)=xde=(1/2)*(d(i)-y(i))*(d(i)-y(i));e=de+e;dwk=q*(d(i)-y(i))*a;fork=1:pdw(k,1:2)=q*(d(i)-y(i))*wk(k)*a(k)*(1-a(k))*x;endwk=wk+dwk;%从
6、隐层到输出层权值的更新w=w+dw;%从输入层到隐层的权值的更新enderror(epoch)=e;m(epoch)=epoch;if(e7、eto=neto+wk(j)*a(j);endneto=neto+wk(p+1)*(-1);y(i)=neto;%线性函数end%plotfigure(1)plot(m,error)xlabel('迭代次数')ylabel('均方误差')title('BP算法的学习曲线')figure(2)plot(xx,d)holdonplot(xx,y,'r')legend('蓝线是目标曲线','红线是逼近曲线')7.实验报告要求:书写实验报告,其中包括实验题目,实验目的,实验要求,实验算法,实验步骤,实验程序等。