Answers:
首先:
仅凭输入和输出的数量就无法确定好的网络拓扑。它主要取决于训练示例的数量和您要学习的分类的复杂性。[1]
Yoshua Bengio提出了一个非常简单的规则:
只需不断添加层,直到测试错误不再改善。[2]
此外:
ConvNet的较早功能包含更多的通用功能(例如边缘检测器或色斑检测器),这些功能应该对许多任务有用,但是ConvNet的后续层将逐渐变得更加特定于原始数据集中包含的类的细节。[ 3]
例如,在学习特征检测器的方法中:
第一层学习边缘检测器,随后的层学习更复杂的特征,而更高层的层则编码更多的抽象特征。[4]
因此,建议使用两个密集层而不是一层。
最后:
有关Dropout的原始论文提供了许多在实践中使用Dropout时需要考虑的启发式方法。其中之一是: 对传入的(可见的)以及隐藏的单元使用辍学。在网络的每一层应用dropout显示出良好的效果。[5]
在CNN中,通常在每个池化层之后以及密集层之后都应用一个Dropout层。一个很好的教程在这里[6]
参考文献:
[1] https://www.cs.cmu.edu/Groups/AI/util/html/faqs/ai/neural/faq.html
[2] Bengio,Yoshua。“基于梯度的深度架构培训的实用建议。” 神经网络:交易技巧。Springer Berlin Heidelberg,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