Prima di tutto:
Non c'è modo di determinare una buona topologia di rete solo dal numero di ingressi e uscite. Dipende in modo critico dal numero di esempi di allenamento e dalla complessità della classificazione che stai cercando di imparare. [1]
e Yoshua Bengio ha proposto una regola molto semplice:
Continua ad aggiungere livelli fino a quando l'errore del test non migliora più. [2]
Inoltre:
Le funzionalità precedenti di ConvNet contengono funzionalità più generiche (ad esempio rilevatori di bordi o rilevatori di BLOB di colore) che dovrebbero essere utili per molte attività, ma i livelli successivi di ConvNet diventano progressivamente più specifici per i dettagli delle classi contenute nel set di dati originale. [ 3]
Ad esempio, in un metodo per l'apprendimento dei rilevatori di funzionalità:
il primo livello apprende i rilevatori di bordi e i livelli successivi apprendono funzioni più complesse, mentre i livelli di livello superiore codificano funzioni più astratte. [4]
Pertanto, l'utilizzo di due strati densi è più consigliato di uno strato.
Finalmente:
Il documento originale su Dropout fornisce una serie di euristiche utili da considerare quando si utilizza il dropout in pratica. Uno di questi è:
Usa il dropout su unità in arrivo (visibili) e nascoste. L'applicazione del dropout su ogni livello della rete ha mostrato buoni risultati. [5]
nella CNN, di solito, viene applicato un livello Dropout dopo ogni livello di pool e anche dopo il livello Dense. Un buon tutorial è qui [6]
Riferimenti:
[1] https://www.cs.cmu.edu/Groups/AI/util/html/faqs/ai/neural/faq.html
[2] Bengio, Yoshua. "Consigli pratici per la formazione graduale di architetture profonde." Reti neurali: trucchi del mestiere. 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