Em primeiro lugar:
Não há como determinar uma boa topologia de rede apenas a partir do número de entradas e saídas. Depende criticamente do número de exemplos de treinamento e da complexidade da classificação que você está tentando aprender. [1]
e Yoshua Bengio propôs uma regra muito simples:
Continue adicionando camadas até que o erro de teste não melhore mais. [2]
Além disso:
Os recursos anteriores de um ConvNet contêm recursos mais genéricos (por exemplo, detectores de borda ou detectores de bolhas de cores) que devem ser úteis para muitas tarefas, mas as camadas posteriores do ConvNet se tornam progressivamente mais específicas aos detalhes das classes contidas no conjunto de dados original. [ 3]
Por exemplo, em um método para aprender detectores de recursos:
a primeira camada aprende os detectores de borda e as camadas subseqüentes aprendem recursos mais complexos, e as camadas de nível superior codificam recursos mais abstratos. [4]
Portanto, usar duas camadas densas é mais recomendável do que uma camada.
Finalmente:
O artigo original sobre Dropout fornece várias heurísticas úteis a serem consideradas ao usar o dropout na prática. Um deles é:
use o dropout nas unidades de entrada (visíveis) e ocultas. A aplicação de desistência em cada camada da rede mostrou bons resultados. [5]
na CNN, geralmente, uma camada Dropout é aplicada após cada camada de pool e também após a camada Densa. Um bom tutorial está aqui [6]
Referências:
[1] https://www.cs.cmu.edu/Groups/AI/util/html/faqs/ai/neural/faq.html
[2] Bengio, Yoshua. "Recomendações práticas para o treinamento baseado em gradiente de arquiteturas profundas." Redes neurais: truques do comércio. 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