人工智能A7论坛 >> Tensorflow和深度学习笔记_论坛版 >> 5.卷积神经网络基础

5.2 CNN中的一些基本概念

卷积核

卷积核,英文名kernels,有时候也叫滤波(filters )。卷积核是CNN的核心。从信号处理的角度而言,滤波器是对信号做频率筛选,这里主要是空间-频率的转换,cnn的训练就是找到最好的滤波器使得滤波后的信号更容易分类,还可以从模版匹配的角度看卷积,每个卷积核都可以看成一个特征模版,训练就是为了找到最适合分类的特征模版。

问题:卷积核的大小和初始值怎么取?

 

feature map

每一个卷积核滤波得到的图像就是一类特征的映射,也就是一个feature map

 

 

LeNet5

 

每个卷积核作用于input可以得到一个feature map。

我们知道图片有RGB三个维度,这三个维度的处理是怎么样的?

Stride

Stride就是“移动切片的步长,影响取样的数量。也就是表示做卷积时对input进行每次移动多少步。每一块抽取一部分信息,长宽就缩减,但是厚度(depth)增加。抽取的各个小块儿,再把它们合并起来,就变成一个压缩后的立方体。

厚度为什么增加?一定增加吗?

一般来说,后面的卷积层feature map要比前面的feature map数多些

Padding

填充的方式有两种,有效填充”和“相同填充”。在相同填充中,超出边界的部分使用补充0的办法,使得输入输出的尺寸相同。而在有效填充中,则不使用补充0的方法,不能超出边界

以一维的填充为例:

在图像的padding任务中,

如图中紫色方框所示,左边是有效填充,右边是相同填充。在相同填充中,超出边界的部分使用补充0的办法,使得输入输出的图像尺寸相同。而在有效填充中,则不使用补充0的方法,不能超出边界,

 

思考问题在一个CNN网络中,input层Layer A做了卷积以后变成Layer B,再做卷积变成Layer C。为了达到图中所示的A、B、C三个layer宽和高都一样大的效果,需要怎么设置padding和stride 两个参数。

[很显然,需要stride=1, padding设置成same]

Pooling(池化层)

就是当跨步比较大的时候,它会漏掉一些重要的信息,为了解决这样的问题,就加上一层叫pooling,事先把这些必要的信息存储起来,然后再变成压缩后的层。最常见的就是mean-poolingmax-pooling

Pooling层可以理解为一种特殊的卷积层。

Pooling层的作用:

1). invariance(不变性),这种不变性包括translation(平移)rotation(旋转)scale(尺度)[详见附录“POOLing的三个不变性的形象化解释”]

2. 保留主要的特征同时减少参数(降维,效果类似PCA)和计算量,防止过拟合,提高模型泛化能力

3).获得定长输出。(文本分类的时候输入是不定长的,可以通过池化获得定长输出)

4).防止过拟合或有可能会带来欠拟合。

patch

一个局部切片

参考:

http://xrds.acm.org/blog/2016/06/convolutional-neural-networks-cnns-illustrated-explanation/

 

感受野的理解

输出feature map某个节点的响应对应的输入图像的区域就是感受野

拿一个例子来算算

pool3的一个输出对应pool3的输入大小为2*2  如果padding=valid 

pool3: 2*2 conv4: 4*4 conv3: 6*6 pool2:12*12 conv2:14*14 pool1:28*28 conv1:30*30

因此 pool3的感受野大小就是30*30