您如何确定用于图像分类的卷积神经网络的参数?

时间:2014-07-01 12:10:00

标签: computer-vision neural-network unsupervised-learning autoencoder

我正在使用卷积神经网络(无监督特征学习来检测特征+ Softmax回归分类器)进行图像分类。我已经完成了Andrew NG在这方面的所有教程。 (http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial)。

我开发的网络有:

  • 输入图层 - 大小为8x8(64个神经元)
  • 隐藏层 - 大小为400的神经元
  • 输出图层 - 尺寸3

我已经学会了使用稀疏自动编码器将输入层连接到隐藏层的权重,因此有400种不同的功能。

通过从任何输入图像(64x64)连续拍摄8x8色块并将其输入到输入层,我得到400个大小为(57x57)的特征图。

然后我使用最大池与大小为19 x 19的窗口来获得400个大小为3x3的要素图。

我将此要素图提供给softmax图层,将其分为3个不同的类别。

这些参数,例如隐藏层数(网络深度)和每层神经元数量,在教程中提出,因为它们已成功用于一个特定数据集,其中所有图像的大小为64x64

我想将此扩展到我自己的数据集,其中图像更大(例如400x400)。 我如何决定

  1. 层数。

  2. 每层神经元的数量。

  3. 合并窗口的大小(最大合并)。

2 个答案:

答案 0 :(得分:21)

隐藏层数: 所需的隐藏层数取决于数据集的内在复杂性,可以通过查看每个层实现的内容来理解:

  • 零隐藏层允许网络仅模拟线性函数。这对于大多数图像识别任务来说是不够的。

  • 一个隐藏层允许网络模拟任意复杂的功能。这适用于许多图像识别任务。

  • 理论上,两个隐藏层对单层提供的好处不大,但实际上,某些任务可能会找到一个有益的附加层。这应该谨慎对待,因为第二层可能导致过度拟合。使用两个以上的隐藏层是几乎从不有益仅对特别复杂的任务有用,或者当有大量的训练数据可用时(基于Evgeni Sergeev评论更新)。

enter image description here

简而言之,如果你有时间,那么测试一个和两个隐藏层,看看哪个能达到最满意的效果。如果你没有时间,那么你应该在一个隐藏层上进行一次平底船,你就不会出错。

卷积层数: 根据我的经验,卷积层越多越好(在合理范围内,因为每个卷积层减少了完全连接层的输入特征的数量),尽管在大约两到三层后,准确度增益变得相当小,因此您需要决定是否您的主要重点是概括准确性或培训时间。也就是说,所有图像识别任务都是不同的,所以最好的方法是简单地尝试逐个增加一个卷积层的数量,直到你对结果满意为止。

每个隐藏层的节点数: ......再一次,决定节点数量没有神奇的公式,每个任务都有所不同。经过的粗略指导是使用前一层大小2/3的多个节点,第一层2/3是最终特征图的大小。然而,这只是一个粗略的指南,并且再次依赖于数据集。另一个常用选项是从过多的节点开始,然后通过 pruning 删除不必要的节点。

最大合并窗口大小: 我总是在卷积后直接应用最大池,所以我可能没有资格对你应该使用的窗口大小提出建议。也就是说,19x19最大池化似乎过于严重,因为它实际上会丢弃大部分数据。也许您应该看一下更传统的LeNet网络布局:

http://deeplearning.net/tutorial/lenet.html

https://www.youtube.com/watch?v=n6hpQwq7Inw

其中您重复执行卷积(通常为5x5或3x3),然后进行最大池化(通常使用2x2池化窗口,但大型输入图像可能需要4x4)。

结论 找到合适的网络布局的最佳方法是执行试验和错误测试。很多测试。没有一个适合所有人的网络,只有您知道数据集的内在复杂性。执行必要测试数量的最有效方法是cross validation

答案 1 :(得分:1)

简而言之,您可以确定参数的可能值并使用这些值,运行一系列模型建模和预测,以选择最佳参数值,从而获得最小的预测误差和更简单的模型。

在数据分析术语中,我们使用holdout, cross-validation, bootstrapping来确定模型参数的值,因为以无偏见的方式进行预测非常重要。