您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > 人工神经网络1DOC
人工神经网络——BP网络1.BP神经网络逼近函数步骤1:假设频率参数k=1,绘制要逼近的非线性函数的曲线。函数的曲线如图1所示k=1;p=[-1:.05:8];t=1+sin(k*pi/4*p);plot(p,t)title('要逼近的非线性函数');xlabel('时间');ylabel('非线性函数');图1要逼近的非线性函数曲线步骤2:网络的建立应用newff()函数建立BP网络结构。隐层神经元数目n可以改变,暂设为n=3,输出层有一个神经元。选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,网络训练的算法采用Levenberg–Marquardt算法trainlm。n=3;net=newff(minmax(p),[n,1],{'tansig''purelin'},'trainlm');对于初始网络,可以应用sim()函数观察网络输出y1=sim(net,p);figure;plot(p,t,'-',p,y1,':')title('未训练网络的输出结果');xlabel('时间');ylabel('仿真输出--原函数-');同时绘制网络输出曲线,并与原函数相比较,结果如图2所示。图2未训练网络的输出结果其中“”代表要逼近的非线性函数曲线;“‥‥‥”代表未经训练的函数曲线;因为使用newff()函数建立函数网络时,权值和阈值的初始化是随机的,所以网络输出结构很差,根本达不到函数逼近的目的,每次运行的结果也有时不同。步骤3:网络训练应用train()函数对网络进行训练之前,需要预先设置网络训练参数。将训练时间设置为50,训练精度设置为0.01,其余参数使用缺省值。训练后得到的误差变化过程如图3所示。图3net.trainParam.epochs=50;%网络训练步骤设置为50net.trainParam.goal=0.01;%网络训练精度设置为0.01net=train(net,p,t);%开始训练网络TRAINLM,Epoch0/50,MSE2.26463/0.01,Gradient364.666/1e-010TRAINLM,Epoch9/50,MSE0.0096751/0.01,Gradient16.4769/1e-010TRAINLM,Performancegoalmet.从以上结果可以看出,网络训练速度很快,经过一次循环跌送过程就达到了要求的精度0.01。步骤4:网络测试对于训练好的网络进行仿真:y2=sim(net,p);figure;plot(p,t,'-',p,y1,':',p,y2,'--')title('训练后网络的输出结果');xlabel('时间');ylabel('仿真输出');绘制网络输出曲线,并与原始非线性函数曲线以及未训练网络的输出结果曲线相比较,比较出来的结果如图4所示。图4训练后网络的输出结果其中“”代表要逼近的非线性函数曲线;“‥‥‥”代表未经训练的函数曲线;“―――”代表经过训练的函数曲线;从图中可以看出,得到的曲线和原始的非线性函数曲线很接近。这说明经过训练后,BP网络对非线性函数的逼近效果比较好。不同频率下的逼近效果改变非线性函数的频率和BP函数隐层神经元的数目,对于函数逼近的效果有一定的影响。网络非线性程度越高,对于BP网络的要求越高,则相同的网络逼近效果要差一些;隐层神经元的数目对于网络逼近效果也有一定影响,一般来说隐层神经元数目越多,则BP网络逼近非线性函数的能力越强。下面通过改变频率参数和非线性函数的隐层神经元数目来加以比较证明。(1)频率参数设为k=1,当隐层神经元数目分别取n=3、n=6、n=8,时得到了训练后的网络输出结果如图5、6、7所示。图5当n=3时训练后网络的输出结果图6当n=6时训练后网络的输出结果图7当n=8时训练后网络的输出结果其中“”代表要逼近的非线性函数曲线;“‥‥‥”代表未经训练的函数曲线;“―――”代表经过训练的函数曲线;(2)频率参数设为k=2,当隐层神经元数目分别取n=3、n=6、n=8时,得到了训练后的网络输出结果如图8、9、10所示。图8当n=3时训练后网络的输出结果图9当n=6时训练后网络的输出结果图10当n=8时训练后网络的输出结果其中“”代表要逼近的非线性函数曲线;“‥‥‥”代表未经训练的函数曲线;“―――”代表经过训练的函数曲线;(3)频率参数设为k=4,当隐层神经元数目分别取n=3、n=6、n=8时,得到了训练后的网络输出结果如图11、12、13所示。图11当n=3时训练后网络的输出结果图12当n=6时训练后网络的输出结果图13当n=8时训练后网络的输出结果其中“”代表要逼近的非线性函数曲线;“‥‥‥”代表未经训练的函数曲线;“―――”代表经过训练的函数曲线;结论通过上述仿真结果可知,当k=1,n=3时;k=2,n=8时;k=4,n=8时;BP神经网络分别对函数取得了较好的逼近效果。由此可见,n取不同的值对函数逼近的效果有很大的影响。改变BP网络隐层神经元的数目,可以改变BP神经网络对于函数的逼近效果。隐层神经元数目越多,则BP网络逼近非线性函数的能力越强。1、或门的实现:1)net=newp([01;-22],1);P=[0011;0101];T=[0111];net=init(net);Y1=sim(net,P)net.trainParam.epochs=25;net=train(net,P,T);Y=sim(net,P)输出结果:Y1=1111Y=0111Matlab中运行结果图2、与门的实现1)net=newp([01;-22],1);P=[0011;0101];T=[0001];net=init(net);Y1=sim(net,P)net.trainParam.epochs=20;net=train(net,P,T);Y=sim(net,P)Y1=1111Y=0001Matlab中运行结果图3、异或问题的实现%Perceptrons_02%用两层感知器实现异或%第一层是随机层,即权重何偏差随机确定,以第一层的输出作为第二层的输入pr1=[01;01];%随机感知器输入的范围net1=newp(pr1,3);net1.inputweights{1}.initFcn='rands';net1.biases{1}.initFcn='rands';index=0;whileindex==0net1=init(net1);iw1=net1.IW{1}b1=net1.b{1}p1=[0011;0101];[a1,pr]=sim(net1,p1);pr2=[01;01;01];net2=newp(pr2,1);net2.trainParam.epochs=10;net2.trainParam.show=1;%p2=a1;%最好不要直接赋值,可能a2=sim(net2,p2)不能正常运行p2=ones(size(a1));p2=p2.*a1;t2=[0110];[net2,tr2]=train(net2,p2,t2);epoch2=tr2.epochperf2=tr2.perfiw2=net2.IW{1}b2=net2.b{1}a2=sim(net2,p2)savePercept02net1net2ifa2==t2index=1;endend输出结果:iw1=-0.8379-0.36140.7022-0.25020.12410.7356b1=0.6954-0.5815-0.0898epoch2=012345678perf2=0.50000.75000.50000.75000.50001.00000.75000.50000iw2=221b2=-3a2=01104、使用感知器将二维的四组输入矢量分成两类P=[-0.5-0.5+0.3-0.1+0.20.0+0.6+0.8;-0.5+0.5-0.5+1.0+0.5-0.9+0.8-0.6];T=[11011010];plotpv(P,T);net=newp([-11;-11],1);watchon;cla;plotpv(P,T);linehandle=plotpc(net.IW{1},net.b{1});E=1;net=init(net);linehandle=plotpc(net.IW{1},net.b{1});while(sse(E))[net,Y,E]=adapt(net,P,T);linehandle=plotpc(net.IW{1},net.b{1},linehandle);drawnow;end;pausewatchoff;2、0-9数字的识别%建立样本库%输入源样本1,2,3,4为不同字体数字clearallforpcolum=0:39p1=ones(30,30);%建立全为1的样本矩阵m=strcat('E:\MATLAB7\work\123\sjwl\num\',int2str(pcolum),'.jpg');I=imread(m);%循环读入0-39个样本数字文件I1=im2bw(I,0.3);%对输入图像进行二值化处理采用全局阈值0.3[m,n]=find(I1==0);rowmin=min(m);rowmax=max(m);colummin=min(n);colummax=max(n);I2=I1(rowmin:rowmax,colummin:colummax);%截取是入图像中的数字部分rate=30/max(size(I2));I3=imresize(I2,rate);%对输入文件变尺寸处理[i,j]=size(I3);row=round((30-i)/2);colum=round((30-j)/2);p1(row+1:row+i,colum+1:colum+j)=I3;%建立起30*30的矩阵p1=-1*p1+ones(30,30);%反色处理forhh=1:30p((hh-1)*30+1:(hh-1)*30+30,pcolum+1)=p1(hh,1:30);end%将处理的源样本输入供神经网络训练的样本pcolum是样本数循环变量switchpcolumcase{0,10,20,30}t(pcolum+1)=0%数字0case{1,11,21,31}t(pcolum+1)=1%数字1case{2,12,22,32}t(pcolum+1)=2%数字2case{3,13,23,33}t(pcolum+1)=3%数字3case{4,14,24,34}t(pcolum+1)=4%数字4case{5,15,25,35}t(pcolum+1)=5%数字5case{6,16,26,36}t(pcolum+1)=6%数字6case{7,17,27,37}t(pcolum+1)=7%数字7case{8,18,28,38}t(pcolum+1)=8%数字8case{9,19,29,39}t(pcolum+1)=9%数字9end%建立与训练样本对应的输出值tendsave51ETpt;%训练网络clearallload51ETpt;%加载样本pr(1:900,1)=0;pr(1:900,2)=1;net=newff(pr,[251],{'logsig''purelin'},'traingdx','learngdm');%创建BP网络net.trainParam.epochs=3000;%设置训练步数net.trainParam.goal=0.000000001;%设置训练目标net.trainParam.show=10;%设置训练显示格数net.trainParam.lr=0.05%设置训练学习率net=train(net,p,t);%训练BP网络saveET51netnet;%使用网络clearallm=input('请输入测试样本(E:\MATLAB7\work\123\sjwl\try\):');I=strcat('E:\MATLAB7\work\123\sjwl\try\',int2str(m),'.jpg');U=imr
本文标题:人工神经网络1DOC
链接地址:https://www.777doc.com/doc-4223834 .html