您的位置:首页 > 理论基础 > 计算机网络

神经网络模型:感知器

2017-05-09 23:33 148 查看
感知器是神经网络中的概念,是一个接受数个输入,经过内部计算后得到输出的模型,其模拟的是自然界的神经细胞:接受输入信号的刺激,达到一定阈值后细胞体表现为激发,否则为抑制。

单层感知器

单层感知器最为简单,只有输入层和输出层,其计算规则为:激发值为输入与权值的点积,若激发值大于某阈值则输出1以代表激发,否则输出-1代表抑制。

python代码演示该模型:

class slp(object):
def __init__(self,num):
self.w = [0.0]*num
self.input = [0.0]*num
self.output = 0

def input(self,ilist):
if len(ilist) == len(self.input):
self.input = ilist
else:
print 'length error'

def calcu_result(self):
iszie = len(self.input)
res = sum([self.w[i]*self.input[i] for i in range(isize)])
if res > 0:
self.output = 1
else:
self.output = -1


这里简便起见以0为阈值。

单层感知器可以实现简单逻辑的判断,但要求数据是线性可分的。对线性可分这个条件要求的原因在于其计算输出的方法:output=∑wi∗input(i) 。

要实现对线性不可分数据的分类,需要使用多层感知器。

多层感知器

多层感知器与单层感知器相比,多了一层隐藏层,隐藏层对于输入和输出都是透明的。

def mlp(object):
def __init__(self,num):
self.in_floor = [slp(num)]*num
self.hide_floor = [slp(num)]*num
self.w = [0.0]*num
self.output = 0

def input(self,ilist):
if len(ilist) == len(self.in_floor):
for item in self.in_floor:
item.input(ilist)
else:
print 'length error'
def calcu_result(self):
in_for_hide = []
for item in self.in_floor:
item.calcu_result()
in_for_hide.append(item.output)
for item in self.hide_floor:
item.input(in_for_hide)
item.calcu_result()

iszie = len(self.hide_floor)
res = sum([self.w[i]*self.hide_floor[i].output for i in range(isize)])
if res > 0:
self.output = 1
else:
self.output = -1


可以看出,多层感知器是对单层感知器的扩展,输入层到隐藏层就是多个单层感知器的组合,隐藏层各个节点的输出又作为输入,组合为输出层的输出。

注1:代码中暂时未考虑权值的分配,权值的分配需要训练算法。

注2:在代码中以列表形式将输入存入对象中,多层感知器中这样做是低效的,会有大量的输入数据冗余。

参考资料:

http://blog.csdn.net/stan1989/article/details/8565499

http://blog.csdn.net/xiaowei_cqu/article/details/9004331
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  神经网络 python