Die ursprüngliche Frage bezog sich speziell auf TensorFlow-Implementierungen. Die Antworten beziehen sich jedoch auf Implementierungen im Allgemeinen. Diese allgemeine Antwort ist auch die richtige Antwort für TensorFlow.
Muss ich mir bei der Verwendung von Batch-Normalisierung und Dropout in TensorFlow (insbesondere unter Verwendung der Contrib.Layer) Sorgen um die Bestellung machen?
Es scheint möglich, dass es Probleme gibt, wenn ich Dropout gefolgt von einer Batch-Normalisierung verwende. Wenn beispielsweise die Verschiebung in der Chargennormalisierung auf die größeren Skalennummern der Trainingsausgaben umgestellt wird, diese Verschiebung jedoch auf die kleineren Skalennummern (aufgrund der Kompensation für mehr Ausgaben) ohne Ausfall während des Tests angewendet wird, dann ist dies der Fall Schaltung kann ausgeschaltet sein. Kompensiert die TensorFlow-Chargennormalisierungsschicht dies automatisch? Oder passiert das nicht aus irgendeinem Grund, den ich vermisse?
Gibt es auch andere Fallstricke, auf die Sie achten müssen, wenn Sie diese beiden zusammen verwenden? Wenn Sie beispielsweise davon ausgehen, dass ich sie in der oben genannten Reihenfolge in der richtigen Reihenfolge verwende (vorausgesetzt, es liegt eine korrekte Reihenfolge vor), kann es dann zu Problemen bei der Verwendung von Batch-Normalisierung und Dropout auf mehreren aufeinanderfolgenden Ebenen kommen? Ich sehe nicht sofort ein Problem damit, aber mir fehlt möglicherweise etwas.
Vielen Dank!
AKTUALISIEREN:
Ein experimenteller Test scheint zu zeigen , dass Ordnung tut Angelegenheit. Ich habe dasselbe Netzwerk zweimal mit nur der Batch-Norm und dem umgekehrten Ausfall betrieben. Wenn der Ausfall vor der Chargennorm liegt, scheint der Validierungsverlust zu steigen, da der Trainingsverlust sinkt. Im anderen Fall gehen sie beide unter. Aber in meinem Fall sind die Bewegungen langsam, so dass sich die Dinge nach mehr Training ändern können und es nur ein einziger Test ist. Eine endgültigere und fundiertere Antwort wäre weiterhin willkommen.