本文结构:
- 什么是感知器
- 有什么用
- 代码实现
1. 什么是感知器
如下图,这个神经网络中,每个圆圈都是一个神经元,神经元也叫做感知器
只有一个隐藏层的神经网络就能拟合任何一个函数,但是它需要很多很多的神经元。
而深层网络用相对少的神经元就能拟合同样的函数,但是层数增加了,不太容易训练,需要大量的数据。
为了拟合一个函数,可以使用一个浅而宽的网络,也可以使用一个深而窄的网络,后者更节约资源。
下图单挑出一个感知器来看:
向它输入 inputs,经过 加权 求和,再作用上激活函数后,得到一个输出值
感知器的激活函数可以有很多选择,关于激活函数可以看 常用激活函数比较
2. 有什么用
用感知器可以实现 and 函数,or 函数,还可以拟合任何的线性函数,任何线性分类或线性回归问题都可以用感知器来解决。
但是,感知器却不能实现异或运算,如下图所示,异或运算不是线性的,无法用一条直线把 0 和 1 分开。
训练权重和偏置的算法如下:
其中,t 是训练样本的实际值,y 是感知器的输出值,即由 f 计算出来的。eta 称为学习速率,是个常数,作用是控制每一步调整权的幅度。
3. 代码实现
[main]
先训练and感知器
and_perception = train_and_perceptron()
得到训练后获得的权重和偏置
print and_perception
weights :[0.1, 0.2]
bias :-0.200000
再去测试,看结果是否正确
print '1 and 1 = %d' % and_perception.predict([1, 1])
其中
[train_and_perceptron]
先创建感知器,输入参数个数为2(因为and是二元函数),激活函数为f
p =