人工神经网络(Artificial Neural Networks)
来源:互联网 发布:java 圆周率算法 编辑:程序博客网 时间:2024/05/16 00:58
转载:http://www.datalab.sinaapp.com/?p=309
人工神经网络的产生一定程度上受生物学的启发,因为生物的学习系统是由相互连接的神经元相互连接的神经元组成的复杂网络。而人工神经网络跟这个差不多,它是一系列简单的单元相互密集连接而成的。其中每个单元有一定数量的输入(可能是其他单元的输出),并产生单一的实数值输出(可能成为其他单元的输入)。
常见的人工神经网络结果如下图:
- 网络由三部分组成,输入层、隐藏层和输出层,往往隐藏层只有1层或2层;
- 每层由若干个单元组成,所有单元分层互连形成一个无环的前馈网络;
- 下一层的某个单元的输入由上一层的所有单元的输出组成,每个输入的权重由相连的边的权值决定。
不同类型的单元对输入的处理方式不同,比较常用是sigmoid单元。sigmoid单元首先对所有输入进行线性组合,然后将线性组合的结果通过sigmoid函数,即F(x) = 1/(1+power(e,-x)),映射为0跟1之间的某个值作为输出(sigmoid函数有一个比较有用的特征就是F’(x) = F(x)*( 1-F(x)))。这样,sigmoid单元的输出是输入的非线性函数,并且输出是输入的可微函数。
人工神经网络的学习训练就是为每一条边选取一个合适的权值,使网络输出层的输出和目标值之间的误差平方和最小化。而像反向传播(BackPropagation)这样的算法,就是使用梯度下降来调节各条表的权重,来最佳拟合输入-输出组成的训练数据。
实验:人脸朝向识别
实验数据是具有不同朝向的600多张人脸图片,每个图片的像素是30*32。分为训练集、验证集和测试集,大致图像张数比为6:2:2。训练集用来训练人工神经网络,验证集用来选取在验证集上具有最好性能的网络,而测试集对选中的网络进行最后的评估。
- 输入:每个像素对应一个网络输入,并且把范围是0-255的亮度值按比例缩放到0-1之间。
- 输出:使用4个不同的输出单元,每个单元对应一个脸的朝向,取具有最高值的输出作为人脸朝向的预测值。另外,使用0.1和0.9,而不是0和1,例如(0.9,0.1,0.1,01.)表示脸朝向正前方。
- 网络结构:使用一个隐藏层,隐藏层的单元个数为3个。
- 其他参数:学习速率设定为0.3,输入单元的权值被设定为0.0,输出单元的权值被初始化为一个较小的随机值。
Python版反向传播算法(随机梯度下降版本)
1.把输入沿网络前向传播
def
feedForward(
self
):
for
j
in
xrange
(
1
,
self
.hidNum):
sum
=
0.0
for
i
in
xrange
(
self
.inNum):
sum
+
=
self
.inOutput[i]
*
self
.wIn2Hid[i][j]
self
.hidOutput[j]
=
self
.sigmoid(
sum
)
for
k
in
xrange
(
self
.outNum):
sum
=
0.0
for
j
in
xrange
(
self
.hidNum):
sum
+
=
self
.hidOutput[j]
*
self
.wHid2Out[j][k]
self
.outOutput[k]
=
self
.sigmoid(
sum
)
2.把误差沿网络反向传播
def
backPropagate(
self
,N
=
0.3
):
# calculate errors for output
for
k
in
xrange
(
self
.outNum):
error
=
self
.targets[k]
-
self
.outOutput[k]
self
.outOutputError[k]
=
self
.outOutput[k]
*
(
1
-
self
.outOutput[k])
*
error
# calculate errors for hidden layer
for
j
in
xrange
(
self
.hidNum):
error
=
0.0
for
k
in
xrange
(
self
.outNum):
error
+
=
self
.outOutputError[k]
*
self
.wHid2Out[j][k]
self
.hidOutputError[j]
=
self
.hidOutput[j]
*
(
1
-
self
.hidOutput[j])
*
error
# update hid-output weights
for
j
in
xrange
(
self
.hidNum):
for
k
in
xrange
(
self
.outNum):
change
=
N
*
self
.outOutputError[k]
*
self
.hidOutput[j]
self
.wHid2Out[j][k]
+
=
change
# update input-hid weights
for
i
in
xrange
(
self
.inNum):
for
j
in
xrange
(
1
,
self
.hidNum):
change
=
N
*
self
.hidOutputError[j]
*
self
.inOutput[i]
self
.wIn2Hid[i][j]
+
=
change
实验结果:通过调整输入层、隐藏层中各个单元的权重,网络在验证集上最高的预测准确率是0.892,对应在测试集上的准确率为0.844。
- 人工神经网络(Artificial Neural Networks)
- 人工神经网络 Artificial Neural Networks - A Tutorial
- 人工神经网络(Artificial Neural Networks, ANN)
- Artificial Neural Network(人工神经网络)
- 人工神经网络(ANN, artificial neural network)
- 人工神经网络框架列表(neural networks library)
- 数据挖掘-目录-人工神经网络 (Artificial Neural Network)
- R语言高级算法之人工神经网络(Artificial Neural Network)
- Artificial Neural Networks/Neural Networks/Neural Computing Conception
- 神经网络(Neural Networks)
- 神经网络 (Neural Networks)
- Neural Networks(神经网络)
- Support Vector Machines vs Artificial Neural Networks
- Artificial Neural Networks && FileStorage of OpenCV
- Artificial Neural Networks: Linear Classification (Part 2)
- Artificial Neural Networks: Matrix Form (Part 5)
- Convolutional Neural Networks卷积神经网络
- 卷积神经网络(Convolutional Neural Networks)
- 在一个layout中保持button都是一样大小的
- Ubuntu10.04设置开机自动登入root帐户(不要密码登录)|| Ubuntu14.04root登录|| Ubuntu12.04root登录
- PHP接口继承及接口多继承详解
- [Android UI布局]android:gravit与android:layout_gravity的区别
- WEB 打印 LODOP
- 人工神经网络(Artificial Neural Networks)
- Java读取ini配置
- A == B ?(考虑小数)
- 机器学习的各种资源链接
- Android Layout中dip, dp, px, sp区别
- POJ1006
- hdu 4008 树形dp 时间戳在树形结构中的应用
- 几种漂亮的hr横线!!!
- ubuntu更新软件时候磁盘空间不足的问题