您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > BP算法的matlab程序实现
智能控制导论实验一(神经网络)1.实验题目:利用多层前向传播神经网络来逼近非线性函数)cos1(5.0xy。2.实验目的:通过自己编写程序掌握BP学习算法,并对人工神经网络的非线性映射能力有一个深入了解。3.实验要求:1.训练算法采用传统的BP学习算法。2.模型结构采用1-6-1型(即输入层取1,隐层取6,输出层取1)。3.样本集在这里取20点,即20/2ix,19,,1,0i,)cos1(5.0xy4.要求所编程序得到的仿真结果为:一是能显示均方误差的变化趋势,二是要显示出此非线性函数)cos1(5.0xy和它的逼近曲线。4.实验算法(BP算法):给定20组样本11tx,;22tx,;;2020tx,。这里ix为一维输入矢量,iy为一维期望输出矢量20,,,,2,1pi。假设矢量iy为网络的实际输出。则训练过程为:1.确定神经网络结构为1-6-1型,选maxE作为最大容许误差,并给出隐层到输出层的权矩阵0W,输入层到隐层的权矩阵0V,将其初始化为某一小的随机权矩阵。2.依次输入样本ix,计算网络的实际输出iy。3.计算误差EytEii]2/[2,20,,,,2,1pi。4.计算各层权值的变化量5.调节权值6.若20p,则1pp,转2),否则转7)。7.若maxEE,结束,否则0E,1p,转2)进入下一轮的计算,若直到规定的次数时还没有使maxEE,则强行退出,终止程序。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=length(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)=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;%从隐层到输出层权值的更新w=w+dw;%从输入层到隐层的权值的更新enderror(epoch)=e;m(epoch)=epoch;if(eerror_goal)break;elseif(epoch==max_epoch)disp('在目前的迭代次数内不能逼近所给函数,请加大迭代次数')endend%simulationfori=1:n%样本个数x=[xx(i);-1];neto=0;forj=1:pneti(j)=w(j,1)*x(1)+w(j,2)*x(2);a(j)=1/(1+exp(-neti(j)));neto=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.实验报告要求:书写实验报告,其中包括实验题目,实验目的,实验要求,实验算法,实验步骤,实验程序等。
本文标题:BP算法的matlab程序实现
链接地址:https://www.777doc.com/doc-2555606 .html