Skip to content

DeepLearning笔记(6)——CNN

1. CNN特点

假设一批图片样本,图片尺寸都是100 × 100(单通道)。使用神经网络来进行训练,假设第一个隐藏层有2500个神经单元,则参数个数一共为 10000 × 2500 = 2500W

存在的问题:

  1. 参数数据量太多,需要大量的计算资源
  2. 图片是一个二维结构,相邻像素之间的关联较强,距离远的像素之间关联较弱,因此不必要一次性把所有像素在一起计算

CNN可以很好地解决这两个问题,其基本特点是:

  • 权值共享
  • 局部连接

2. 卷积

卷积是一种数学运算,定义可以参考wiki。在CNN中,主要关注离散卷积。关于离散卷积的例子,可以参考 如何通俗易懂地解释卷积?- 马同学的回答。CNN中的卷积操作和数学上的定义类似,但并不完全一致(相乘的顺序不同)。

卷积核即filter,用来对图像进行特征提取。计算规则如图所示:

图片来源:https://mlnotebook.github.io/post/CNN1/

假设图片尺寸为 ,filter尺寸为 ,则卷积操作后的尺寸为

3. Padding

上面的操作存在的不足:

  1. 每次卷积操作都会使图像缩小
  2. 角落和边缘区域的像素点使用的很少,即丢失了图像边缘位置的信息

为了解决这两个问题,在卷积操作之前,先对图像周围进行填充,通常为zero-padding,即填充0。

图片来源:https://mlnotebook.github.io/post/CNN1/

常用的填充方式为:

  • Valid:不填充
  • Same:输出尺寸和输入尺寸一致

filter尺寸通常为奇数:方便same padding

4. Stride

filter每次移动多个像素。此时输出尺寸为:

5. Channel

对于RGB图像,有三个色彩通道,此时filter不再是二维,而是一个三维的结构。

图片来源:https://mlnotebook.github.io/post/CNN1/

  • 输入尺寸
  • filter尺寸
  • 输出尺寸

假设filter的个数为 ,则最后输出的尺寸为

6. 卷积层的符号表示

  • filter size:
  • padding:
  • stride:
  • number of filters:
  • input:
  • output: ,其中 ,
  • each filter:
  • activations: ,
  • weights:
  • bias:

7. Pooling

  • 提高计算速度
  • 提高所提取的特征的有效性

参数:尺寸 ,步长

pooling方法有:

  • max pooling
  • average pooling

常用的是max pooling:

8. CNN一般结构

  • 卷积层(CONV)
  • 池化层(POOL)
  • 全连接层(FC)