Po pierwsze:
Nie ma sposobu, aby określić dobrą topologię sieci tylko na podstawie liczby wejść i wyjść. Zależy to krytycznie od liczby przykładów szkolenia i złożoności klasyfikacji, której próbujesz się nauczyć. [1]
a Yoshua Bengio zaproponował bardzo prostą zasadę:
Po prostu dodawaj kolejne warstwy, aż błąd testu przestanie się poprawiać. [2]
Co więcej:
Wcześniejsze funkcje ConvNet zawierają bardziej ogólne funkcje (np. Detektory krawędzi lub detektory kropelek koloru), które powinny być przydatne do wielu zadań, ale późniejsze warstwy ConvNet stają się stopniowo bardziej szczegółowe dla szczegółów klas zawartych w oryginalnym zbiorze danych. [ 3]
Na przykład w metodzie uczenia detektorów funkcji:
pierwsza warstwa uczy się detektorów krawędzi, a kolejne warstwy uczą się bardziej złożonych funkcji, a warstwy wyższego poziomu kodują więcej funkcji abstrakcyjnych. [4]
Zatem użycie dwóch gęstych warstw jest bardziej zalecane niż jedna warstwa.
Wreszcie:
Oryginalny artykuł na temat Dropout zawiera szereg użytecznych heurystyk, które należy wziąć pod uwagę przy stosowaniu Dropout w praktyce. Jednym z nich jest:
Użyj dropouta na przychodzących (widocznych) oraz ukrytych jednostkach. Zastosowanie przerwania na każdej warstwie sieci wykazało dobre wyniki. [5]
w CNN zwykle warstwa usuwana jest nakładana po każdej warstwie pulowania, a także po warstwie gęstej. Dobry tutorial jest tutaj [6]
Bibliografia:
[1] https://www.cs.cmu.edu/Groups/AI/util/html/faqs/ai/neural/faq.html
[2] Bengio, Joshua. „Praktyczne zalecenia dotyczące gradientowego szkolenia głębokich architektur”. Sieci neuronowe: sztuczki handlu. 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