回答:
まず第一に:
入力と出力の数だけから適切なネットワークトポロジを決定する方法はありません。トレーニングの例の数と、学習しようとしている分類の複雑さに大きく依存します。[1]
ヨシュアベンジオは非常に単純なルールを提案しました:
テストエラーが改善されなくなるまで、レイヤーを追加していきます。[2]
さらに:
ConvNetの初期の機能には、多くのタスクに役立つはずのより一般的な機能(エッジ検出器やカラーBlob検出器など)が含まれていますが、ConvNetの後のレイヤーは、元のデータセットに含まれるクラスの詳細に徐々に特定されます。[ 3]
たとえば、特徴検出器を学習する方法では、次のようになります。
最初の層はエッジ検出器を学習し、後続の層はより複雑な機能を学習し、より高いレベルの層はより抽象的な機能をエンコードします。[4]
したがって、1つの層よりも2つの密な層を使用することをお勧めします。
最終的に:
ドロップアウトに関する最初の論文は、ドロップアウトを実際に使用する際に検討すべきいくつかの有用な発見的方法を提供しています。それらの1つは、次のとおりです。 着信(表示)および非表示のユニットでドロップアウトを使用します。ネットワークの各層でドロップアウトを適用すると、良い結果が得られました。[5]
CNNでは、通常、ドロップアウトレイヤーは各プーリングレイヤーの後に、また高密度レイヤーの後に適用されます。良いチュートリアルがここにあります[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