Ante todo:
No hay forma de determinar una buena topología de red solo a partir del número de entradas y salidas. Depende críticamente del número de ejemplos de entrenamiento y la complejidad de la clasificación que está tratando de aprender. [1]
Yoshua Bengio ha propuesto una regla muy simple:
Solo sigue agregando capas hasta que el error de prueba ya no mejore. [2]
Además:
Las características anteriores de una ConvNet contienen características más genéricas (por ejemplo, detectores de bordes o detectores de manchas de color) que deberían ser útiles para muchas tareas, pero las capas posteriores de la ConvNet se vuelven progresivamente más específicas a los detalles de las clases contenidas en el conjunto de datos original. [ 3]
Por ejemplo, en un método para aprender detectores de características:
la primera capa aprende detectores de borde y las capas posteriores aprenden características más complejas, y las capas de nivel superior codifican características más abstractas. [4]
Por lo tanto, usar dos capas densas es más recomendable que una capa.
Finalmente:
El documento original sobre Deserción proporciona una serie de heurísticas útiles a tener en cuenta al usar la deserción en la práctica. Uno de ellos es:
Use el abandono en las unidades entrantes (visibles) y ocultas. La aplicación de la deserción en cada capa de la red ha mostrado buenos resultados. [5]
en CNN, por lo general, se aplica una capa de abandono después de cada capa de agrupación y también después de su capa densa. Un buen tutorial está aquí [6]
Referencias
[1] https://www.cs.cmu.edu/Groups/AI/util/html/faqs/ai/neural/faq.html
[2] Bengio, Yoshua. "Recomendaciones prácticas para la formación basada en gradientes de arquitecturas profundas". Redes neuronales: trucos del oficio. 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