接上篇:卷积神经网络对图片分类-上

 

5 池层(Pooling Layers)

池层通常用在卷积层之后,池层的作用就是简化卷积层里输出的信息,  减少数据维度,降低计算开销,控制过拟合。

 

如之前所说,一张28X28的输入图片,经过5X5的过滤器后会得到一个24X24的特征图像,继续简化这个24X24特征图像里的信息,只保留关键信息。需要加入一个池层:

卷积神经网络对图片分类-中

把相邻的4个单元里的信息合并成一个。上图中4种颜色区域里的4个单元被合并成了一个单元,就是取4个单元里的最大值,当然可以使用其他方法来进行合并。

卷积神经网络对图片分类-中

28X28经过3个过滤器变成3个24X24的特征图像,然后再经过池层简化成3个12X12的特征图像。

 

6 全连接层(Fully connected layer)

现在我们可以在网络的末端加上一个全连接层,来检测获取到的这些特征图像与哪种类别更相近:

卷积神经网络对图片分类-中

该层接收上一层的输出当做输入,上一层的输出就是一些学习出来的特征图像,该层输出一个N维的向量,代表图片可能的分类概率[0.01,0.04,0.94,0.02],数值越高表示这些特征图像和那一类更相近。 这里0.94代表图像是船的可能性为94%,表示预测图片与过滤器产生了很高的激励,获取到了很多高层次的特征,例如船帆,船桨等等特征。0.02表示图像是鸟的可能性为2%,表示预测图片与过滤器产生了很低的激励,没有获取到了很多高层次的特征,例如翅膀,喙等等特征。

 

7 更深的卷积神经网络结构

一般情况下在卷积神经网络结构中不仅仅只有卷积层,池层,全连接层,还有其它一些层穿插在卷积层之间。可以减少出现过拟合,提高学习率,缓解梯度消失等等问题。一个典型的CNN结构如下所示:

Input->Conv->ReLU->Conv->ReLU->Pool->Dropout->Conv->ReLU->Conv->ReLU->Pool->Dropout->FullyConnected

 

现在我们只看每个卷积层,不考虑它们之间穿插的其他层。所以在第一个卷积层之后,又进入下一个卷积层,那么第一个卷积层的输出就变成了下一个卷积层的输入。第一个卷积层的输入是一个普通的图片,第二个卷积层的输入是从第一个卷积层变化而来的一些特征图像。以后每一个卷积层的输入,基本上都是上一个卷积层提取出来的特征图像,后面的卷积层组合之前的卷积层里提取的简单特征, 得到更复杂的特征数据。

 

当数据一层一层通过更多的卷积层时,你可以得到的特征图像代表的特征就会更加的复杂。在网络的最后,你也许可以得到一个抽象的物体。如果你想通过可视化方法在卷积神经网络中看到更多的信息。这里有一个工具方便你查看https://github.com/yosinski/deep-visualization-toolbox,它的效果如下图所示:

卷积神经网络对图片分类-中

 

8 Dropout Layers

dropout层可以防止网络出现过拟合,网络有时训练出来的权重值在训练集上表现的很好,但不能泛化到测试集上,在测试集表现的不好。例如我们有一组训练数据如下图所示,训练出来了一条曲线与训练数据很匹配, 

卷积神经网络对图片分类-中

但是如果把调训练出来的曲线用在测试数据上时就很肯能不太准确了,还不如一条直线更贴切

卷积神经网络对图片分类-中

dropout的思想就是,在网络每次训练的时候随机去掉一些神经元(30%,50%等等),防止训练出来的权重值过度的适合训练数据。每次训练的时候都随机去掉一部分神经元,那么每次训练的时候都是全新的网络,类似多个网络训练完毕后来进行投票来决定最佳的权重值,有点像决策树模型。

卷积神经网络对图片分类-中

 

(未完待续)

 

参考:

http://neuralnetworksanddeeplearning.com/chap6.html#convolutional_neural_networks_in_practice

https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/