Ref: 从LeNet-5看卷积神经网络CNNs

关于这篇论文的一些博文的QAC:

1. 基本原理

MLP(Multilayer Perceptron,多层感知器)是一种前向神经网络(如下图所示),相邻两层网络之间全连接。

sigmoid通常使用tanh函数和logistic函数。

1998年Yann LeCun在论文“Gradient-Based Learning Applied to Document Recognition”中提出了LeNet-5,并在字母识别中取得了很好的效果。LeNet-5的结构如下图所示:

  • input:输入图片,32*32像素;
  • C1:5*5卷积核,生成6个feature maps,共需要(6*5*5 + 6)=156个参数;
  • S2:2*2个像素相加,然后乘以一个参数,加上一个偏置,共计2*6=12个参数;
  • C3:5*5卷积核,生成16个feature maps,每个feature map由S2中若干个feature maps卷积得到,如图Table1所示;
  • S4:和S2相同的操作,共计16*2 = 32个参数;
  • C5:与S4全连接,共计(5*5*16*120+120)=48120个参数;
  • F6:与C5全连接,共计(120*84+84) = 10164 个参数;
  • output: 与F6全连接。

下面开始对各层进行具体分析。

卷积:

C1/C3/C5这三层都用了卷积操作,学过数字图像处理的同学一定对这种图像上的卷积很熟悉,本质上是用一块权重模板在图像上的各个区域做加权求和,如下图所示:

图中黄色的3*3 卷积核从图像的左上角开始向右或向下移动,对移动过程中覆盖的区域求加权和。最后得到(5-3+1)*(5-3+1)大小的卷积结果,称为一个feature map。

C1: LeNet-5的C1层用6个 5*5卷积核对输入的32*32图像进行卷积,每个卷积核对应生成一个(32-5+1)*(32-5+1)的feature map,共计6个feature map。

C3: C3的过程稍为复杂,C3总共生成了16个feature map,每个feature map按照Table1选择输入。例如C3编号为0的feature map是由S2中编号为0、1、2的feature map 生成的。先由3个卷积核分别在S2的0、1、2 feature map上生成3个临时feature map,然后把这三个临时feature map相加得到C3的feature map 0。这样构造C3 有两个好处:一是相比于全连接,可以减少参数的数量;二是每个feature map的输入都不相同,可以达到互补的效果。

C5: C5层用全连接的方式,每个feature map都是由S4中所有的feature map卷积结果求和得到的。由于S4的feature map大小是5*5,卷积核大小也是5*5,所以卷积后得到的是一个1*1的矩阵。

另外,C1/C3/C5每个feature map计算结果都会在计算结尾加上一个偏置。

池化pooling:

池化的作用主要有两个:一是减少参数数量;二是在使模型具有较好的平移不变性。

和卷积很类似,不同之处在于卷积核覆盖的区域是重叠的,而池化的各个区域是没有重叠的。所以当S2/S4用2*2的池化模板后,feature map的宽和高都减小为原来的一半。

再借用一下UFLDL Tutorial关于池化的示意图:

..

输出层:

output层/F6层都是与前一层全连接,C5-F6-output整体结构可以看成一个多层感知器。

所以LeNet-5其实是由三种不同的结构组成的:卷积、池化、多层感知器。而使用这三种结构也就可以构成大部分卷积神经网络了。

卷积:

目前几乎所有公开发表的卷积模型都使用全连接结构,即某一层(第m层)的feature map是由上一层(第m-1层)的所有feature map卷积后求和得到的。但是在实际使用中需要注意模型的参数个数,参数个数的增加对计算量的影响很大。

池化:

目前常用的是平均池化或者最大池化,即把上一层feature map的各个池化区域内的单元值求平均值或最大值。

输出层:

可以把最后一层的结果输出到某个分类器(如Logistic Regression等)进行分类。

参考资料:

[1]Yann LeCun, Gradient-Based Learning Applied to Document Recognition, 1998

[2]Theano Deeplearning Tutorial

[3]Stanford UFLDL Tutorial: http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B

2. 边边角角问题

(1) 卷积核是学习得来,还是预定义好的?

整个网络的训练,主要就是为了学那个卷积核啊。

(2) 有哪些参数?

如果是卷积层输出4个feature map,那么它就有4个卷积核。
自定义的其实有卷积核的kernel_size,也就是kernel_width和kernel_height,
然后num_output就是输出的feature map个数。
还有一个数字其实也跟卷积核有关,这个卷积层的输入的channel数量.
总的来说,决定卷积层里面卷积核的参数数量的数字总共有4个:num_output, num_channel, kernel_height, kernel_width。

(3) channel是什么?
对一张RGB图像经过一个卷积核得到的是一张feature map。

原理是这样的,通常所说的2D卷积其实是3D的(卷积核的维度应该是kernel_height * kernel_height * input_channel),只不过第三个维度恰好等于输入通道的个数,所以卷了以后在第三个维度上就没了,变成了扁平的二维feature map,所以叫2D卷积。

另一种理解方式是,一个卷积核的形状是 kernel_height * kernel_height,并且有input_channel层,把它和输入图像做卷积的过程是这样的:

用卷积核的第一层 和 输入图像的第一个通道 做一次2D卷积,
用卷积核的第二层 和 输入图像的第二个通道 做一次2D卷积,
……,
用卷积核的最后一层和输入图像的最后一个通道做一次2D卷积,
于是得到了input_channel 个 feature map,最后把这input_channel 个 feature map 对应位置加起来,最后得到一张feature map,这就是卷积的结果。

卷积层的参数共享

卷积核的参数就是神经网络的输入层。

[OpenCV] Convolutional Neural Network的更多相关文章

  1. 论文阅读(Weilin Huang——【TIP2016】Text-Attentional Convolutional Neural Network for Scene Text Detection)

    Weilin Huang--[TIP2015]Text-Attentional Convolutional Neural Network for Scene Text Detection) 目录 作者 ...

  2. 卷积神经网络(Convolutional Neural Network,CNN)

    全连接神经网络(Fully connected neural network)处理图像最大的问题在于全连接层的参数太多.参数增多除了导致计算速度减慢,还很容易导致过拟合问题.所以需要一个更合理的神经网 ...

  3. Convolutional Neural Network in TensorFlow

    翻译自Build a Convolutional Neural Network using Estimators TensorFlow的layer模块提供了一个轻松构建神经网络的高端API,它提供了创 ...

  4. 卷积神经网络(Convolutional Neural Network, CNN)简析

    目录 1 神经网络 2 卷积神经网络 2.1 局部感知 2.2 参数共享 2.3 多卷积核 2.4 Down-pooling 2.5 多层卷积 3 ImageNet-2010网络结构 4 DeepID ...

  5. HYPERSPECTRAL IMAGE CLASSIFICATION USING TWOCHANNEL DEEP CONVOLUTIONAL NEURAL NETWORK阅读笔记

    HYPERSPECTRAL IMAGE CLASSIFICATION USING TWOCHANNEL  DEEP  CONVOLUTIONAL NEURAL NETWORK 论文地址:https:/ ...

  6. A NEW HYPERSPECTRAL BAND SELECTION APPROACH BASED ON CONVOLUTIONAL NEURAL NETWORK文章笔记

    A NEW HYPERSPECTRAL BAND SELECTION APPROACH BASED ON CONVOLUTIONAL NEURAL NETWORK 文章地址:https://ieeex ...

  7. 【论文阅读】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

    ShuffleNet: An Extremely Efficient Convolutional Neural Network for MobileDevices

  8. 《ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs》

    代码: keras:https://github.com/phdowling/abcnn-keras tf:https://github.com/galsang/ABCNN 本文是Wenpeng Yi ...

  9. 《Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences》

    Kalchbrenner’s Paper Kal的这篇文章引用次数较高,他提出了一种名为DCNN(Dynamic Convolutional Neural Network)的网络模型,在上一篇(Kim ...

随机推荐

  1. errno

    关于errno有以下需要注意: 1  A common mistake is to do if (somecall() == -1) {                printf("som ...

  2. JavaIO 将数据写入到文件中去

    package com.Practice_FileWriter; import java.io.FileWriter; import java.io.IOException; public class ...

  3. swiper的初步使用

    1.引入文件,顺序引入(此处基于jquery,且版本至少1.7以上) <link rel="stylesheet" href="path/to/swiper-3.4 ...

  4. jquery插入复杂表格,合并行列

    此方法为个人测试所写,针对各种兼容性问题还未测试,初写的目的是easyui复杂表头有些缺陷,比如某个表头合并两列, 在easyui中这样操作无法绑定两个值 或者说我没找到 再或者 可以做个隐藏 数据列 ...

  5. USACO翻译:USACO 2012 JAN三题(3)

    USACO 2012JAN(题目三) 一.题目概览 中文题目名称 放牧 登山 奶牛排队 英文题目名称 grazing climb lineup 可执行文件名 grazing climb lineup ...

  6. Node.js 框架

    Node.js的是一个JavaScript平台,它允许你建立大型的Web应用程序.  Node.js的框架平台使用JavaScript作为它的脚本语言来构建可伸缩的应用. 当涉及到Web应用程序的开发 ...

  7. bzoj 2739 最远点

    Description 给你一个N个点的凸多边形,求离每一个点最远的点. Input 本题有多组数据,第一行一个数T,表示数据组数. 每组数据第一行一个数N,表示凸多边形点的个数,接下来N对数,依次表 ...

  8. 4.Powershell交互界面

    Powershell提供两种接口:交互式和自动化脚本 先学下如何与Powershell Console和平共处,通过Powershell Console和机器学会对话. 通过以上一个简单测试,知道Po ...

  9. [ZigBee] 16、Zigbee协议栈应用(二)——基于OSAL的无线控制LED闪烁分析(下)

    说在前面:上一篇介绍了无线LED闪烁实现的OSAL部分,本篇介绍如何实现无线数据收发及数据处理: 上一篇是用SI跟着流程查看源码,我个人认为以架构的思维去了解代码能让人更清晰 ::ZMain.c程序入 ...

  10. 说说Java程序和数据库交互的乱码解决

    本文就本人遇到的问题进行讲解 1.通过jdbc直连方式,连接Mysql数据库,从程序向数据库中写入数据出现的乱码解决方案. 当通过程序向Student表中写入一条数据时,写入数据库的内容会产生乱码. ...