元々の質問は、特にTensorFlowの実装に関するものでした。ただし、答えは一般的な実装です。この一般的な答えは、TensorFlowの正しい答えでもあります。
TensorFlowでバッチ正規化とドロップアウトを使用する場合(具体的にはcontrib.layersを使用)、順序について心配する必要がありますか?
ドロップアウトを使用してすぐにバッチ正規化を実行すると、問題が発生する可能性があります。たとえば、バッチ正規化のシフトがトレーニング出力のより大きなスケール数にトレーニングするが、テスト中にドロップアウトなしで同じシフトがより小さな(より多くの出力を持つための補正により)スケール数に適用される場合、シフトがオフになっている可能性があります。TensorFlowバッチ正規化レイヤーはこれを自動的に補正しますか?それとも私が行方不明になった何らかの理由でこれは起こりませんか?
また、これら2つを一緒に使用するときに注意すべき他の落とし穴はありますか?たとえば、上記に関して正しい順序で使用していると仮定すると(正しい順序があると仮定して)、連続する複数のレイヤーでバッチ正規化とドロップアウトの両方を使用すると問題が発生する可能性がありますか?すぐに問題が発生することはありませんが、何か不足している可能性があります。
どうもありがとうございました!
更新:
実験的なテストでは、と思われる順序がことを示唆してい事柄。同じネットワークを2回実行しましたが、バッチノルムとドロップアウトリバースのみを使用しています。ドロップアウトがバッチノルムの前にある場合、トレーニングの損失が減少するにつれて検証の損失が増加するように見えます。他のケースでは、どちらも下がっています。しかし私の場合、動きが遅いので、トレーニングを重ねると状況が変わる可能性があり、それは1つのテストにすぎません。より決定的で情報に基づいた回答をいただければ幸いです。