人工神经网络(Artificial Neural Networks)
人工神经网络的产生一定程度上受生物学的启发,因为生物的学习系统是由相互连接的神经元相互连接的神经元组成的复杂网络。而人工神经网络跟这个差不多,它是一系列简单的单元相互密集连接而成的。其中每个单元有一定数量的输入(可能是其他单元的输出),并产生单一的实数值输出(可能成为其他单元的输入)。
常见的人工神经网络结果如下图:
(1) 网络由三部分组成,输入层、隐藏层和输出层,往往隐藏层只有1层或2层;
(2) 每层由若干个单元组成,所有单元分层互连形成一个无环的前馈网络;
(3) 下一层的某个单元的输入由上一层的所有单元的输出组成,每个输入的权重由相连的边的权值决定。

不同类型的单元对输入的处理方式不同,比较常用是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。
转自本人博客:http://www.datalab.sinaapp.com/
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
人工神经网络(Artificial Neural Networks)的更多相关文章
- 人工神经网络 Artificial Neural Network
2017-12-18 23:42:33 一.什么是深度学习 深度学习(deep neural network)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高 ...
- 吴恩达深度学习第1课第4周-任意层人工神经网络(Artificial Neural Network,即ANN)(向量化)手写推导过程(我觉得已经很详细了)
学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...
- 循环神经网络(Recurrent Neural Networks, RNN)介绍
目录 1 什么是RNNs 2 RNNs能干什么 2.1 语言模型与文本生成Language Modeling and Generating Text 2.2 机器翻译Machine Translati ...
- 机器学习之Artificial Neural Networks
人类通过模仿自然界中的生物,已经发明了很多东西,比如飞机,就是模仿鸟翼,但最终,这些东西会和原来的东西有些许差异,artificial neural networks (ANNs)就是模仿动物大脑的神 ...
- 吴恩达《深度学习》-第一门课 (Neural Networks and Deep Learning)-第三周:浅层神经网络(Shallow neural networks) -课程笔记
第三周:浅层神经网络(Shallow neural networks) 3.1 神经网络概述(Neural Network Overview) 使用符号$ ^{[
- 吴恩达《深度学习》-第一门课 (Neural Networks and Deep Learning)-第四周:深层神经网络(Deep Neural Networks)-课程笔记
第四周:深层神经网络(Deep Neural Networks) 4.1 深层神经网络(Deep L-layer neural network) 有一些函数,只有非常深的神经网络能学会,而更浅的模型则 ...
- 卷积神经网络Convolutional Neural Networks
Convolutional Neural Networks NOTE: This tutorial is intended for advanced users of TensorFlow and a ...
- Neural Networks and Deep Learning 课程笔记(第三周)浅层神经网络(Shallow neural networks)
3.1 神经网络概述(Neural Network Overview ) (神经网络中,我们要反复计算a和z,最终得到最后的loss function) 3.2 神经网络的表示(Neural Netw ...
- Ng第八课:神经网络表述(Neural Networks: Representation)
8.1 非线性假设 8.2 神经元和大脑 8.3 模型表示 1 8.4 模型表示 2 8.5 特征和直观理解 1 8.6 样本和直观理解 II 8.7 多类分类 8.1 非线性假设 无 ...
随机推荐
- Unity3d Shader开发(三)Pass(Culling & Depth Testing)
剔除是一种通过避免渲染背对观察者的几何体面来提高性能的优化措施.所有几何体都包含正面和反面.剔除基于大多数对象都是封闭的事实:如果你有一个立方体,你不会看到背离你的那一面(总是只有一面在你的前方),因 ...
- qt 5 小练习 创建无边框界面
我们大家都知道QT5 自带的界面不是那么美观,并且每个软件我们都发现他们的边框是自定义的,所以我决定写一篇这样的博文,也许已经有许许多多篇大牛写的论文了,但我还是想写一篇记录自己的学习QT的历程 首先 ...
- 洛谷 P1417 烹调方案
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- 关于appStore评分的相关说明--转自张诚教授
在iOS7以前,评分地址如下 itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?typ ...
- 解决在构造函数中使用Session,Session为null的问题
问题描述: public abstract class PageBase : System.Web.UI.Page 在PageBase中如何使用Session??? 我直接用 Session[&quo ...
- ping(1)
/* ping program for learning IP protocol author: jeff date: 2014/10/25 */ #include <stdio.h> # ...
- 理解sparse coding
理解sparse coding 稀疏编码系列: (一)----Spatial Pyramid 小结 (二)----图像的稀疏表示——ScSPM和LLC的总结 (三)----理解sparse codin ...
- [Gauss]POJ1753 Flip Game
题意:给4×4的棋盘的初始状态,b代表黑,w代表白. 要求变成全黑或者全白 最少需要几步. 简单的做法 可以暴搜 状压bfs 不再赘述 主要学习Gauss做法 同样是01方程组 用异或解 注意全黑或全 ...
- NuGet学习笔记(1)——初识NuGet及快速安装使用
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- FastJSON学习
这几天在用FastJSON,发现需要测试一些关键点,包括: 1.是否支持内部类:测试结果是支持,但是需要设置为静态类(static) 2.是否支持继承的自动序列化及反序列化:测试结果是支持 3.缺字段 ...