CNN 中密集层的数量和大小

数据挖掘 卷积神经网络
2021-09-22 02:18:13

我见过的大多数网络在最终的 softmax 层之前都有一两个密集层。

  • 是否有任何原则性的方法来选择密集层的数量和大小?
  • 对于相同数量的参数,两个密集层是否比一层更具代表性?
  • 应该在每个密集层之前应用 dropout,还是只应用一次?
1个回答

首先:

仅从输入和输出的数量无法确定良好的网络拓扑。这主要取决于训练示例的数量和您尝试学习的分类的复杂性。 [1]

Yoshua Bengio 提出了一个非常简单的规则:

只需继续添加层,直到测试错误不再改善。 [2]

而且:

ConvNet 的早期特征包含更通用的特征(例如边缘检测器或颜色斑点检测器),这些特征应该对许多任务有用,但 ConvNet 的后面层逐渐变得更加具体到原始数据集中包含的类的细节。 3]

例如,在学习特征检测器的方法中:

第一层学习边缘检测器,后续层学习更复杂的特征,更高级别的层编码更多抽象特征。[4]

因此,使用两个密集层比一层更建议。

最后:

关于 Dropout 的原始论文提供了在实践中使用 dropout 时需要考虑的许多有用的启发式方法。其中之一是: 对传入(可见)和隐藏单元使用 dropout。在网络的每一层应用dropout都显示出很好的效果。[5]

在 CNN 中,通常会在每个池化层之后应用一个 Dropout 层,并且在 Dense 层之后也是如此。一个很好的教程在这里 [6]

参考:

[1] https://www.cs.cmu.edu/Groups/AI/util/html/faqs/ai/neural/faq.html

[2] 本吉奥,约书亚。“基于梯度的深度架构训练的实用建议。” 神经网络:交易技巧。施普林格柏林海德堡,2012. 437-478。

[3] http://cs231n.github.io/transfer-learning/

[4] http://learning.eng.cam.ac.uk/pub/Public/Turner/Teaching/ml-lecture-3-slides.pdf

[5] https://machinelearningmastery.com/dropout-regularization-deep-learning-models-keras/

[6] https://cambridgespark.com/content/tutorials/convolutional-neural-networks-with-keras/index.html