感知器神经网络

2017/12/16 21:00
阅读数 20

感知器是一种前馈人工神经网络,是人工神经网络中的一种典型结构。感知器具有分层结构,信息从输入层进入网络,逐层向前传递到输出层。根据感知器神经元变换函数、隐层数以及权值调整规则的不同,可以形成具有各种功能特点的人工神经网络。

一、单层感知器

包括一个线性的累加器和一个二值阈值原件,同时还有一个外部偏差。线性累加器的输出作为二值阈值原件的输入,这样当二值阈值元件产生的输入是整数,神经元就产生输出+1,繁殖,如果其输入是负数,则产生输出-1.即:

使用单层感知器的目的就是让其对外部输入x1,x2,...,xm进行识别分类,单层感知器可将外部输入分为两类:l1l2。当感知器的输出为+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} 

 

 

 

 

 


本文分享自微信公众号 - 瓜大三哥(xiguazai_tortoise)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部