cnn系列文章四 --池化层和简单卷积网络示例

cnn系列文章三 --padding和strides详解

一句歌词继续中:

《霜雪千年》
苔绿青石板街
斑驳了流水般岁月
小酌三盏两杯
理不清缠绕的情结

典型的卷积神经网络

  • convolution (Conv) 卷积层
  • pooling (pool) 池化层
  • fully connected (FC) 全连接层

池化层

1. max pooling(最大池化)

简单的说就是使用过滤器对图像进行区域分割,然后输出每个区域的最大值。

比如下图使用 2 × 2 2\times 2 2×2的过滤器,选择步长为2,则然后输出 4 − 2 2 + 1 = 2 \frac{4 -2}{2} + 1 = 2 242+1=2 2 × 2 2\times2 2×2的图像,每个像素点的值为原图像中过滤器覆盖区域的最大值
cnn系列文章四 --池化层和简单卷积网络示例_第1张图片

最大池化的直观理解:

还记得垂直边缘检测的例子吗,在边缘处,输出图像的值很大。也就是说,当输出图像的值很大时,意味着提取了某些特征。

而最大池化的操作就是,只要在任何一个象限中提取到某个特征,就都会保留到最大池化的输出结果中。如果提取到某个特征,则保留其最大值,比如上图中左上角的9,而如果为提取到特征,则最大池化后的输出仍很小,比如右上角的2.

在实际工作中,加入最大池化后,通常网络表现的会很好。

注意当有多个通道时:是对每一通道分别进行最大池化操作,不会改变图像的通道数目。
cnn系列文章四 --池化层和简单卷积网络示例_第2张图片

2.average pooling (平均池化)

顾名思义,就是在每个区域上求平均值,作为平均池化的输出值
cnn系列文章四 --池化层和简单卷积网络示例_第3张图片

平均池化用的很少

总结

  1. 池化操作不需要训练参数,只有两个超参数:

    • f : f i l t e r s i z e f: filter size f:filtersize
    • s : s t r i d e s: stride s:stride

    常见的超参数有:

    f = 2 , s = 2 f = 2, s=2 f=2,s=2将图像的高度和宽度减半

    f = 3 , s = 2 f=3, s=2 f=3,s=2

  2. 很少用padding,即 p = 0 p=0 p=0

  3. input: n H × n W × n C n_H \times n_W \times n_C nH×nW×nC

    output: ⌊ n H − f s + 1 ⌋ × ⌊ n W − f s + 1 ⌋ × n C \lfloor \frac{n_H - f}{s} + 1 \rfloor \times \lfloor \frac{n_W - f}{s} + 1 \rfloor \times n_C snHf+1×snWf+1×nC

卷积神经网络示例

参数设计收LeNet-5启发。我的建议还是在纸上推导一下呢。

cnn系列文章四 --池化层和简单卷积网络示例_第4张图片

接下来看一下网络结构和参数:

cnn系列文章四 --池化层和简单卷积网络示例_第5张图片

来计算几个参数:
我发现208这个参数数量有点没太搞懂

不是 5 × 5 × 3 × 8 + 8 = 608 5 \times 5 \times 3 \times 8 + 8 = 608 5×5×3×8+8=608吗?

  • 参数大多集中在全连接层
  • 随着网络层深度增加,激活数量在减小,但是数量不能下降的太快,否则会影响网络的表现性能。

卷积神经网络的优势

cnn系列文章四 --池化层和简单卷积网络示例_第6张图片

若是全连接层需要的参数大概是14 million。

  • 参数共享
    这里写图片描述
    某一个特征检测器可以在所有图像上使用,大量减少参数数量
  • 稀疏连接
    这里写图片描述
    每一个输出像素值紧依赖于输入很小的输入值,而非全连接层的所有输入值。更容易发现局部特征

通过以上两种方式,cnn结构大量减少参数数量。

接下来讲解tensorflow卷积和池化两个函数。

你可能感兴趣的:(python深度学习,python,CNN,pooling,tensorflow)