14

我正在使用卷积神经网络(无监督特征学习来检测特征 + 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. 池化窗口的大小(最大池化)。

4

2 回答 2

32

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

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

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

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

在此处输入图像描述

长话短说,如果你有时间,可以同时测试一个和两个隐藏层,看看哪个能达到最令人满意的结果。如果您没有时间,那么您应该在单个隐藏层上下注,这样您就不会出错。

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

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

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

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

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

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

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

于 2014-08-21T08:47:21.703 回答
1

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

在数据分析术语中,我们使用保持、交叉验证、引导来确定模型参数的值,因为以无偏的方式进行预测很重要。

于 2014-07-01T19:48:10.460 回答