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

cnn系列文章三 –padding和strides详解
出去吃了个饭,突然感觉好没胃口,好落寞。。。。
哎,继续吧
一句歌词继续中:

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

典型的卷积神经网络

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

池化层

1. max pooling(最大池化)

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

比如下图使用2×2的过滤器,选择步长为2,则然后输出422+1=22×2的图像,每个像素点的值为原图像中过滤器覆盖区域的最大值
cnn系列文章四 --池化层和简单卷积网络示例cnn系列文章四 --池化层和简单卷积网络示例

最大池化的直观理解:

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

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

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

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

2.average pooling (平均池化)

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

平均池化用的很少

总结

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

    • f:filtersize
    • s:stride

    常见的超参数有:

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

    f=3,s=2

  2. 很少用padding,即p=0

  3. input: nH×nW×nC

    output: nHfs+1×nWfs+1×nC

卷积神经网络示例

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

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

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

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

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

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

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

卷积神经网络的优势

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

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

  • 参数共享
    cnn系列文章四 --池化层和简单卷积网络示例cnn系列文章四 --池化层和简单卷积网络示例
    某一个特征检测器可以在所有图像上使用,大量减少参数数量
  • 稀疏连接
    cnn系列文章四 --池化层和简单卷积网络示例cnn系列文章四 --池化层和简单卷积网络示例
    每一个输出像素值紧依赖于输入很小的输入值,而非全连接层的所有输入值。更容易发现局部特征

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

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