资源描述:
《人工神经网络设计作业》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、人工神经网络设计作业一、利用感知机神经网络完成真值表中的操作设有一个M-P模型神经元有两个输入P1和P2,其输出为a,让其完成下列的真值表功能:P10011P20101a01111、具体的程序及其说明如下:clcP=[0011;0101];T=[0111];%提供两组输入一组输出的训练集C=[-23-23];%设置坐标轴的范围plotpv(P,T,C)%绘制样本点的坐标pause;[R,Q]=size(P);%R个输入[S,Q]=size(T);%S个输出[W,B]=rands(S,R);%随机获得权值plot
2、pc(W,B)%绘制出初始的决策线pause;A=hardlim(netsum(W*P,B));%计算感知器神经元的输出E=T-A;SSE=sumsqr(E);%计算初始决策线的误差forepoch=1:100if(SSE==0)%若误差为零,画出决策线,并停止训练plot(W,B,'r-')disp('训练成功');breakend[dW,dB]=learnp(P,A,T)%感知器的学习W=W+dW;%修正权值B=B+dB;%调整偏差plotpc(W,B);%绘制决策线pause;a=epoch(1);hol
3、donA=hardlim(netsum(W*P,B));%计算感知器神经元输出E=T-A;%计算误差SSE=sumsqr(E);endA%输出最后的训练结果a%输出训练次数2、具体的训练过程如图所示:3、训练结果:训练结束后我们可知道A=[0111],训练次数a=4次。二、利用BP网络逼近一个非线性函数1、函数选择为指数衰减函数,隐层采用对数正切S型,输出层采用线性型,具体的程序及其说明如下:clcn=5;%隐层神经元的个数lr=0.1;%学习率mc=0.9;%动量因子p=0:0.05:3;t=2*exp(-2
4、.*p);[r,l]=size(p);%r输入层的维数[s,l]=size(t);%s输出层的维数w1=0.2*rand(n,r);%隐层的权值deltaw1=zeros(n,r);B1=0.2*rand(n,1);%隐层的偏移量deltaB1=zeros(n,1);w2=0.2*rand(s,n);%输出层权值deltaw2=zeros(s,n);B2=0.2*rand(s,1);%输出层的偏移量deltaB2=zeros(s,1);A1=tansig(w1*p,B1);A2=purelin(w2*A1,B2
5、);plot(p,t,'r+',p,A2,'b:');xlabel('输入样本p');ylabel('输出样本t');axis([03-12])title(['样本点和未经训练的曲线']);legend('样本点');pause;epoch=1;sse=1;forepoch=1:10000%最大训练圈数为1000w1=w1+deltaw1;%权值及其偏移量的调整B1=B1+deltaB1;w2=w2+deltaw2;B2=B2+deltaB2;[A1,A2]=simuff(p,w1,B1,'tansig',w2
6、,B2,'purelin');E=t-A2;sse(epoch)=sumsqr(E);%计算误差if(sse(epoch)==0.001)%达到期望误差退出逼近breakendD2=deltalin(A2,E);D1=deltatan(A1,D2,w2);[deltaw2,deltaB2]=learnbpm(A1,D2,lr,mc,deltaw2,deltaB2);[deltaw1,deltaB1]=learnbpm(p,D1,lr,mc,deltaw1,deltaB1);if(sse(epoch)<=0.00
7、1)breakendend;epochplot(p,t,'r+',p,A2,'b:');xlabel('输入样本p');ylabel('输出样本t');title(['训练',num2str(epoch),'次后的曲线']);legend('样本点');axis([03-12])pauseFF=1:epoch;plot(FF,sse(FF),'r-');xlabel('训练次数');ylabel('误差');title(['SSE误差曲线']);pause;%泛化能力测试[A1,A2]=simuff(p,w1,
8、B1,'tansig',w2,B2,'purelin');p=0:0.05:3;t=2*exp(-2.*p);%训练后逼近的曲线plot(p,A2,'-');xlabel('输入样本p');ylabel('输出样本t');legend('逼近的曲线');axis([03-13])holdon;pt=0:0.1:3;tt=2*exp(-2.*pt);plot(pt,tt,'ro');ti