常用的人工神经网络案例1感知器网络MatLab上机实验例1.1用newp函数设计一个单输入和一个神经元的感知器神经网络,输入的最小值和最大值为0,2。net=newp([02],1);可以用下面语句来观察生成了一个什么样的神经网络。inputweights=net.inputWeights{1,1}inputweights=delays:0initFcn:'initzero'learn:1learnFcn:'learnp'learnParam:[]size:[11]userdata:[1x1struct]weightFcn:'dotprod'weightParam:[1x1struct]从中可以看到,缺省的学习函数为learnp,网络输入给hardlim传递函数的量为数量积dotprod,即输入量和权值矩阵的乘积,然后再加上阈值。缺省的初始化函数为initzero,即权值的初始值置为0。同样地,biases=net.biases{1,1}biases=initFcn:'initzero'learn:1learnFcn:'learnp'learnParam:[]size:1userdata:[1x1struct]例1.2设计一个输入为二维向量的感知器网络,其边界值已定。net=newp([-22;-22],1);和上面的例子一样,权值和阈值的初始值为0。如果不想预置为0,则必须单独生成。例如,两个权值和阈值分别为[-11]和1,应用如下语句:net.IW{1,1}=[-11];net.b{1,1}=[1];应用下面语句验证一下:net.IW{1,1}ans=-11net.b{1,1}ans=1下面来看这个感知器网络对两个输入信号的输出如何,两个信号分别位于感知器两个边界。第一个输入信号:P1=[1;1];a1=sim(net,P1)a1=1第二个输入信号:P2=[1;-1];a2=sim(net,P2)a2=0由此看出,输出是正确的,感知器为输入信号进行了正确的分类。若将两个输入信号组成一个数列,则输出量也为一个数列。P3={[1;1],[1;-1]};a3=sim(net,P3)a3=[1][0]例1.3首先有newp函数生成一个神经网络。net=newp([-22;-22],1);其权值为:wts=net.IW{1,1}wts=00其阈值为:bias=net.b{1,1}bias=0改变权值和阈值:net.IW{1,1}=[3,4];net.b{1,1}=[5];检查权值和阈值,确实已经改变了:wts=net.IW{1,1}wts=34bias=net.b{1,1}bias=5然后应用init来复原权值和阈值。net=init(net);wts=net.IW{1,1}wts=00bias=net.b{1,1}bias=0由此可见,应用init可以复原感知器初始值。例1.4应用init改变网络输入的权值和阈值为随机数。net.inputweights{1,1}.initFcn='rands';net.biases{1,1}.initFcn='rands';net=init(net);下面验证一下权值和阈值:wts=net.IW{1,1}wts=0.8116-0.7460bias=net.b{1,1}bias=0.6294例1.5假设一个二维向量输入的感知器神经网络,其输入和期望值样本为:112,02pt、221,12pt、332,02pt、441,11pt首先,生成一个感知器网络,然后利用train函数进行训练net=newp([-22;-22],1);net.trainParam.epochs=1;%设置最大迭代次数p=[21-2-1;2-221];%样本t=[0101];%导师信号net=train(net,p,t);w=net.IW{1,1}w=-3-1b=net.b{1,1}b=0对输入向量进行仿真验证sim(net,p)ans=0011可见,网络仿真结果没有达到期望值,通过调整训练最大次数可以看其结果。net.trainParam.epochs=20;net=train(net,p,t);sim(net,p)ans=0101因此训练是成功的,训练规则具有一定的收敛性,并且能够达到精度。例1.6设计一个二输入感知器神经网络,将五个输入向量分为两类。P=[-0.5-0.50.5-0.1;-0.50.5-0.51.0]T=[1100]首先,应用newp构造一个神经元感知器神经网络,然后利用plotpv画出输入向量图,与期望值1对应的输入向量用“+”表示,与期望值0对应的输入向量用“o”表示。P=[-0.5-0.50.5-0.1;-0.50.5-0.51.0];T=[1100];net=newp([-11;-11],1);plotpv(P,T);p=[0.7;1.2];a=sim(net,p)a=0plotpv(p,a);holdonplotpv(P,T);plotpc(net.IW{1,1},net.b{1,1})holdoff由此可见,感知器网络能够做到对输入向量进行正确分类,同时验证了网络的可行性。例1.7含有奇异样本的输入向量和期望输出如下:P=[-0.5-0.50.3-0.1-40;-0.50.5-0.5150]T=[11001]首先,应用newp构造一个神经元感知器神经网络,然后利用plotpv画出输入向量图。net=newp([-40-0.5;-0.550],1);plotpv(P,T);net=train(net,P,T);holdonplotpc(net.IW{1,1},net.b{1,1})holdoff为了使图形清晰,我们修改坐标值放大部分图形。axis([-22-22]);由此可见,网络对于输入向量可以做到正确分类,缺点就是样本存在奇异性的情况下训练时间大大增加了。P=[-0.5-0.50.3-0.1-40;-0.50.5-0.5150];T=[11001];net=newp([-40-0.5;-0.550],1);net.inputWeights{1,1}.learnFcn='learnpn';net.biases{1,1}.learnFcn='learnpn';net=train(net,P,T);plotpv(P,T);holdon;plotpc(net.IW{1,1},net.b{1,1});holdoffaxis([-22-22])例1.8单层感知器的一个致命弱点就是输入向量必须是线性可分的。如果输入向量线性可分,感知器可以给出正确的分类结果。而对于线性不可分的输入向量,感知器就不能对输入向量进行正确分类。构造五组输入样本P,T是期望输出。P=[-0.5-0.50.3-0.1-0.8;-0.50.5-0.51.00.0];T=[11000];plotpv(P,T);net=newp(minmax(P),1);net=train(net,P,T);holdon;plotpc(net.IW{1,1},net.b{1,1});holdoff不能对其分类,此结果恰恰证明了前面所述的结论。2线性神经网络MatLab上机实验例2.1假设输入和期望输出为:P=[123]T=[2.04.25.9]设计网络:net=newlind(P,T);通过对输入量进行仿真:O=sim(net,P)O=2.08334.03335.9833可见,网络的输出已经非常接近期望的输出值。例2.2假设输入和期望输出为:P=[21-2-1;2-221];T=[0101];设计网络:net=newlin(minmax(P),1);训练网络:net.trainParam.goal=0.1;net=train(net,P,T);net.IW{1,1}ans=-0.0615-0.2194net.b{1,1}ans=0.5899网路仿真:O=sim(net,P)O=0.02820.96720.27410.4320err=T-Oerr=-0.02820.0328-0.27410.5680mse(err)ans=0.0999例2.3为了测定刀具的磨损速度,做这样的实验:经过一定时间(如每隔一小时),测量一次刀具的厚度,得到一组实验数据如下:时间01234567刀具厚度27.026.826.526.326.125.725.324.8试根据上面的实验数据建立一个大体合适的神经网络。解:t=[01234567];y=[27.026.826.526.326.125.725.324.8];plot(t,y,'*');net=newlind(t,y);%根据t和y设计一个具有最小均方误差的线性神经网络O=sim(net,t);%用输入t来仿真该网络plot(t,O,t,y,'*');e=y-O%期望输出-实际输出mse=mse(y-O)%网络的均方误差值w=net.iw{1,1}%权值b=net.b{1,1}%阈值时间01234567期望输出27.026.826.526.326.125.725.324.8实际输出27.1326.8226.5226.2125.9125.6125.3025.00偏差-0.13-0.02-0.020.090.190.09-0.00-0.20网络权值:-0.3036网络阈值:27.1250网络均方误差:0.0135所拟合的直线:y=-0.3036*t+27.1250例2.4已知一输入信号T=sin(time*pi),其中time=0:0.1:5,构建一个神经网络,利用该组信号的5个过去值预测信号的将来值。解:clc;%清空命令窗口clear;%清空内存time=0:0.1:5;T=sin(time*pi);Q=length(T);X=zeros(5,Q);%X中存储信号T的前5次值,作为网络输入。X(1,6:Q)=T(1,1:(Q-5));X(2,5:Q)=T(1,1:(Q-4));X(3,4:Q)=T(1,1:(Q-3));X(4,3:Q)=T(1,1:(Q-2));X(5,2:Q)=T(1,1:(Q-1));plot(time,T);%绘制信号T曲线xlabel('时间');ylabel('目标信号');title('待预测信号');net=newlind(X,T);O=sim(net,X);figure;plot(time,T,time,O,'r');xlabel('时间');ylabel('输出-目标');title('输出信号和目标信号');e=T-O;mse=mse(T-O)w=net.iw{1,1}b=net.b{1,1}figure;plot(time,e);网络权值:-0.01930.0161-0.0021-0.98081.8808网络阈值:0.0066网络均方误差:0.0018例2.5以下是上证指数2009年2月2日到3月27日的收盘价格,构建一个神经网络,利用该组信号的6个过去值预测信号的将来值。日期价格日期价格2009/02/022011.6822009/03/022093.4522009/02/032060.8122009/03/032071.4322009/02/042107.7512009/03/042198.1122009/02/052098.0212009/03/052221.0822009/02/062181.2412009/03/062193.0122009/02/092224.7112009/03/092118.7522009/02/102265