包括一个线性的累加器和一个二值阈值原件,同时还有一个外部偏差。线性累加器的输出作为二值阈值原件的输入,这样当二值阈值元件产生的输入是整数,神经元就产生输出+1,繁殖,如果其输入是负数,则产生输出-1.即:
使用单层感知器的目的就是让其对外部输入x1,x2,...,xm进行识别分类,单层感知器可将外部输入分为两类:l1和l2。当感知器的输出为+1时,可认为输入x1,x2,...,xm属于l1类,当感知器的输出为-1时,可认为输入x1,x2,...,xm属于l2类,从而实现两类目标的识别。在m维信号空间,单层感知器进行模式识别的判决超平面由下式决定:
多层感知器是单层感知器的一种推广形式,多层感知器网络的信息是逐层向前传播的,下一层的个单元与上一层的每个单元项链。输入单元按照输入/输出关系式进行操作,每层之间的连接权值可以通过学习规则进行调整。可以看出,多层感知器实际上就是多个单层感知器经过适当组合设计而成的,它可以实现任何形状的划分。
1.感知器神经网络的传输函数一般采用阈值函数,所以输出只有两种值;
2.单层感知器只能用于解决线性可分的分类问题,而对线性不可分的分类问题无能为力;
3.感知器学习算法只适应于单层感知器网络,所以一般感知器网络都是单层的。
1. plotpc函数
该函数用于感知器向量绘图中绘制分界线。函数的调用格式为:
plotpc(W,B)
该函数对含权矩阵W和偏差向量B的硬特性神经元的两个或三个输入画一个分类线。
2.plotpv函数
该函数用于绘制感知器的输入向量和目标向量。函数的调用格式为:
plotpv(P,T):以T为标尺,绘制P的列向量
plotpv(P,T,V):在V的范围中绘制P的列向量
例1:‘或’门实现
由此可见,感知器在训练以前的输出是不符合要求的,经过三次训练后的输出已经和目标向量一致了,训练过程如上图所示。
例2:‘异或’门实现
clear all;
pr1=[0 1;0 1];%设置随机感知器层输入问题每个元素的值域
while 1
net1=newp(pr1,3);
% 指定随机感知器层权值初始化函数为随机函数
net1.inputweights{1}.initFcn='rands';
% 指定随机感知器层阈值初始化函数为随机函数
net1.biases{1}.initFcn='rands';
net1=init(net1);%初始化随机感知器层
iw1=net1.iw{1};
b1=net1.b{1};
% 随机感知器层仿真
p1=[0 0;0 1;1 0;1 1]';%随机感知器输入向量(样本)
[a1,pf]=sim(net1,p1);
% 初始化第二层感知器层
pr2=[0 1;0 1;0 1];%设置第二感知器输入向量每个元素的值域
net2=newp(pr2,1);%定义第二感知器层
% 训练第二感知器层
net2.trainParam.epochs=10;
net2.trainParam.show=1;
p2=ones(3,4);%初始化第二感知器层的输入向量
p2=p2.*a1;%随机感知器层的仿真输出结果作为第二感知器的输入向量
t2=[0 1 1 0];%第二感知器层的目标向量
% 训练第二感知器层
[net2,tr2]=train(net2,p2,t2);
a2=sim(net2,p2)
if a2==t2
break
end
end
disp('输出训练过程经过的每一步长为:')
epoch2=tr2.epoch
disp('输出训练过程经过的恶误差:')
perf2=tr2.perf
disp('第二感知器的权值向量为:')
iw2=net2.iw{1}
disp('第二感知器的阈值向量为:')
iw2=net2.b{1}