Bearbeiten: Wie @Toke Faurby richtig hervorhob, verwendet die Standardimplementierung in Tensorflow tatsächlich ein elementweises Dropout. Was ich zuvor beschrieben habe, gilt für eine bestimmte Variante des Ausfalls in CNNs, die als räumlicher Ausfall bezeichnet wird :
In einem CNN erzeugt jedes Neuron eine Merkmalskarte. Da Dropout räumliche Dropout Arbeiten per-Neuron, Fallenlassen eines Neurons bedeutet , dass die entsprechende Merkmalskarte abgelegt wird - beispielsweise jede Position hat den gleichen Wert (normalerweise 0). Daher wird jede Feature-Map entweder vollständig oder gar nicht gelöscht.
Das Pooling wird in der Regel für jede Feature-Map separat ausgeführt. Daher sollte es keinen Unterschied machen, ob Sie vor oder nach dem Pooling Dropout anwenden. Zumindest ist dies bei Pooling-Operationen wie Maxpooling oder Mittelwertbildung der Fall.
Bearbeiten: Wenn Sie jedoch tatsächlich elementweise Dropouts verwenden (was als Standard für Tensorflow festgelegt zu sein scheint), macht es tatsächlich einen Unterschied, ob Sie Dropouts vor oder nach dem Pooling anwenden. Es gibt jedoch nicht unbedingt eine falsche Vorgehensweise. Berücksichtigen Sie die durchschnittliche Pooling-Operation: Wenn Sie vor dem Pooling Dropout anwenden, skalieren Sie die resultierenden Neuronenaktivierungen effektiv nach 1.0 - dropout_probability
, aber die meisten Neuronen sind (im Allgemeinen) ungleich Null. Wenn Sie Dropout nach dem durchschnittlichen Pooling anwenden, werden im Allgemeinen nur ein Bruchteil der " (1.0 - dropout_probability)
nicht skalierten" Neuronenaktivierungen und ein Bruchteil der dropout_probability
Neuronen von Null angezeigt . Beides scheint mir realisierbar, und beides ist absolut falsch.
In diesem Tutorial wird das Pooling vor dem Abbruch verwendet und es werden gute Ergebnisse erzielt.
Das heißt natürlich nicht, dass die andere Reihenfolge nicht funktioniert. Meine Erfahrung ist begrenzt, ich habe sie nur auf dichten Schichten ohne Pooling verwendet.
quelle
Beispiel für ein VGG-ähnliches Convnet aus Keras (Dropout nach Pooling):
quelle