[Neural Networks] (Convolutional Neural Networks)CNN-卷积神经网络学习
参考:http://blog.csdn.net/zouxy09/article/details/8781543 ( 但其中有部分错误)
http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial
一、卷积(convolution) - 整理自UFLDL
卷积的引入,基于三方面考量:一是为了减少全连接网络对于large scale图像的计算复杂度;二是迎合了生物视觉系统的结构特征:视觉皮层是局部接受信息的;三是根据图像的stationary特性:图像的一个部分统计特性与其他部分是一样的(这个统计特性,比如说颜色直方图分布)。
卷积的具体做法
注意:这里小块在原图中的选取是有重叠的
图中实际上是预先训练了一个visible层9个神经元,hidden层1个神经元的全连接AE(AutoEncoder)。再对输入图像的每一个3X3=9的小块取特征(1维),最终得到1X[(5-3+1)X(5-3+1)]个特征。这里的紫色图,实际上就是下文介绍的Feature Map(FM),因为对每个3X3小块只提取1维特征(1个hidden神经元),因此就只有一个FM:有n个特征,就有n个FM。
这样做的目的,从计算的角度来说,(假设hidden层只有1个神经元):
全连接:1X5X5个权重(不考虑bias)
卷积:1X3X3个权重
二、池化(pooling) - 整理自UFLDL
在卷积过后,一般会接着做pooling,原因如下:
例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个(96 − 8 + 1) * (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个892 * 400 = 3,168,400
维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。
就是在卷积得到的每个FM中,对每个给定大小的区域上做运算(这里是不重叠的),可以是取最大值或者取均值等等。
三、例子LeNet-5
1、INPUT -> C1
预先训练NN-C1:input层5X5=25,output层6
用训练好的NN-C1对原图片每个5X5小块(类似sliding window,有重叠采样)取6维特征:得到28X28个小块,每个小块用6维特征表示,即6@28X28。
此时6维的每维特征都有28X28个值,把它们放在一个图里,就变成了一个28X28的FeatureMap(FM),一共6张。
2、C1 -> S2
Subsampling,实际上就是pooling过程。
对每一张FM的每个2X2小块(类似不重叠的sliding window),也就是2X2=4个值做一个运算,简单点的就是取max和均值。复杂点的如下图的Cx到Sx+1部分,做一个线性加权然后放入sigmoid分类器。subsampling(pooling)最终得出一个值用来表示这个2X2小块。
3、S2 -> C3
预先训练NN-C3:input层5X5=25,output层16
一样是做卷积,但这里就有讲究了。C1的输入只是一张图(原图),此时的输入有6张图。
以下参考zouxy09
C3层也是一个卷积层,它同样通过5x5的卷积核去卷积层S2,然后得到的特征map就只有10x10个神经元,但是它有16种不同的卷积核,所以就存在16个特征map了。这里需要注意的一点是:C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合(这个做法也并不是唯一的)。(这里是组合,就像人的视觉系统一样,底层的结构构成上层更抽象的结构,例如边缘构成形状或者目标的部分)。
刚才说C3中每个特征图由S2中所有6个或者几个特征map组合而成。为什么不把S2中的每个特征图连接到每个C3的特征图呢?原因有2点。第一,不完全的连接机制将连接的数量保持在合理的范围内。第二,也是最重要的,其破坏了网络的对称性。由于不同的特征图有不同的输入,所以迫使他们抽取不同的特征(希望是互补的)。
例如,存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。这样C3层有1516个可训练参数和151600个连接。
4、C3 -> S4
与C1 -> S2类似,对C3的每一个FM中2X2的小块做一个运算。
5、S4 -> C5
预先训练NN-C5:input层5X5=25,output层120
这里S4每个FM是5X5大小,因此取小块之后在C5中表现出来的就是1X1的FM。
由于是全连接的,我认为这里对于5X5的输入,每一个输入都是16维的向量,也就是16X(5X5)。
6、C5 -> F6
普通的全连接神经网络
四、训练过程
1、看完UFLDL后,认为训练是每一层先训练一个local分类器。
2、看完其他介绍后的另一种想法,直接使用BP来对整个网络进行训练。
[Neural Networks] (Convolutional Neural Networks)CNN-卷积神经网络学习的更多相关文章
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM
http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR
Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...
- day-16 CNN卷积神经网络算法之Max pooling池化操作学习
利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...
- cnn(卷积神经网络)比较系统的讲解
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- TensorFlow——CNN卷积神经网络处理Mnist数据集
CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...
- tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图
tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...
随机推荐
- 微信开发第4章 通过accesstoken获取用户标签管理
通过access_token获取用户标签管理: 1.获取标签列表 调用接口为: http请求方式:GET(请使用https协议) https://api.weixin.qq.com/cgi-bin/t ...
- Android开发艺术探索(三)——View的事件体系
一.View基础知识 主要介绍内容有:View的位置参数.MotionEvent和TouchSlope对象.VelocityTracker.GestureDetector和Scroller对象 1.什 ...
- spfa + slf优化
最近在练习费用流 , 不是要用spfa吗 ,我们教练说:ns学生写朴素的spfa说出去都让人笑 . QwQ,所以就去学了一下优化 . slf优化就是双向队列优化一下,本来想用lll优化,可是优化后我t ...
- Jquery- 错误消息"Date"未定义,"String"未定义
在jquery的高版本(1.7-1.9)提示“String”未定义,稍低版本提示“Date”未定义错误 解决办法: 1.找到你发生错误的代码(即执行那条代码时发生的错误) 2.使用setTimeout ...
- Hibernate查询之Example查询
org.hibernate.criterion.Example 类允许你通过一个给定实例构建一个条件查询. 此实例的属性值将做成查询条件. Cat cat = new Cat(); cat.setSe ...
- notepad++下载Subversion插件,显示intalltion of subversion failed
notepad++安卓subversion的插件不成功,是因为我们下载TortoiseSVN客户端的版本跟subversion的版本不兼容 一.背景: 在新浪云平台上开发微信公众账号,因为要使用SVN ...
- 半斤八两(创业兴家版 打工仔心声'98 Remix)
创业兴家打工仔 刻苦工作热诚日夜维系天天专心向上依足正轨 结力好比兄弟努力一生打工仔 相亲相爱朋情日夜传递彼此一家那用分高与低 要互相多鼓励 半斤八两 莫记往昔的创伤半斤八两 面对春光应插秧半斤八两 ...
- 怎样查看MySql数据库物理文件存放位置
想导出mysql中的数据库文件,死活找不到,网上说在配置文件中有路径,可是我打开我的配置文件,里边的代码全都是注释掉的,没有一句有用的.后来在某一论坛上找到解决方法了,记录下来. 使用如下命令: my ...
- Java基础知识强化之IO流笔记35:InputStreamReader(Reader字符流的子类)2种read数据方式
1. InputStreamReader(Reader字符流的子类)2种read数据方式: InputStreamReader的read方法: int read():一次读取一个字符 int read ...
- jar打包通过exe4j转换成exe文件
去年的时候有用过,最近写java的时候偶然用到,mark一下,方便以后看 下载链接后面附上 首先我们在eclipse上打包成jar文件,我这里只把简单的截图贴出来,详细的可以自行百度 打包jar文件: ...