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

Posted

技术标签:

【中文标题】您如何确定用于图像分类的卷积神经网络的参数?【英文标题】:How do you decide the parameters of a Convolutional Neural Network for image classification? 【发布时间】:2014-08-21 23:50:05 【问题描述】:

我正在使用 卷积神经网络(无监督特征学习来检测特征 + 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】:

简而言之,您决定可能的参数值,并使用这些值,运行一系列模型构建模拟,然后进行预测,以选择最佳参数值,从而提供最小的预测误差和更简单的模型。

在数据分析方面,我们使用holdout, cross-validation, bootstrapping 来决定模型参数的值,因为以无偏的方式进行预测很重要。

【讨论】:

【参考方案2】:

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

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

一个隐藏层允许网络对任意复杂函数进行建模。这对于许多图像识别任务来说已经足够了。

理论上,两个隐藏层比单层几乎没有什么好处,但是,在实践中,一些任务可能会发现额外的层是有益的。这应该谨慎对待,因为第二层可能会导致过度拟合。使用两个以上的隐藏层几乎从不有益仅对特别复杂的任务有益,或者当有大量训练数据可用时(根据 Evgeni Sergeev 评论更新)。

李>

长话短说,如果您有时间,请同时测试一个和两个隐藏层,看看哪个可以达到最令人满意的结果。如果您没有时间,那么您应该在单个隐藏层上进行一次平底船,并且您不会出错。

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

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

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

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

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

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

结论 找到合适的网络布局的最好方法就是进行试错测试。很多测试。没有万能的网络,只有您知道数据集的内在复杂性。执行必要测试次数的最有效方法是通过cross validation。

【讨论】:

在最先进的"PhotoOCR" paper from 2013 中,我们读到:“我们表现最好的配置是在配置 422-960-480-480-480- 中有五个隐藏层的网络480- 100. 层是全连接的并且使用整流线性单元...”。 (他们没有使用卷积层。)目前的答案是“使用两个以上的隐藏层几乎没有好处。”没有引用参考资料或提供论据。 @Evgeni Sergeev 有趣的发现,论文中使用的训练样本数量非常大,所以我猜他们可以在不过度拟合的情况下摆脱大型网络。我已经相应地更新了答案。

以上是关于您如何确定用于图像分类的卷积神经网络的参数?的主要内容,如果未能解决你的问题,请参考以下文章

Computer Vision基于卷积神经网络实现美食分类

计算机视觉(CV)基于卷积神经网络实现美食分类

掌握可视化卷积神经网络模型,带你畅游图像识别技术领域

设计一个卷积神经网络模型用于遥感图像的场景分类

设计一个卷积神经网络模型用于遥感图像的场景分类

卷积网络图像分类特征提取部分调参技巧(pytorch)