La domanda originale riguardava specificamente le implementazioni di TensorFlow. Tuttavia, le risposte riguardano le implementazioni in generale. Questa risposta generale è anche la risposta corretta per TensorFlow.
Quando si utilizza la normalizzazione batch e il dropout in TensorFlow (in particolare utilizzando i contrib.layers) devo essere preoccupato per l'ordine?
Sembra possibile che se utilizzo il dropout seguito immediatamente dalla normalizzazione batch potrebbero esserci problemi. Ad esempio, se lo spostamento nella normalizzazione batch si allena ai numeri di scala maggiori degli output di addestramento, ma poi lo stesso spostamento viene applicato ai numeri di scala più piccoli (a causa della compensazione per avere più output) senza dropout durante il test, allora quello il turno potrebbe essere disattivato. Il livello di normalizzazione batch di TensorFlow compensa automaticamente questo problema? O questo non accade per qualche motivo che mi manca?
Inoltre, ci sono altre insidie a cui prestare attenzione quando si usano questi due insieme? Ad esempio, supponendo che li stia usando nell'ordine corretto rispetto a quanto sopra (supponendo che ci sia un ordine corretto), potrebbero esserci problemi con l'utilizzo sia della normalizzazione batch che dell'esclusione su più livelli successivi? Non vedo immediatamente un problema con questo, ma potrei perdere qualcosa.
Grazie mille!
AGGIORNARE:
Una prova sperimentale sembra suggerire che l'ordinazione non importa. Ho eseguito la stessa rete due volte con solo la norma batch e il dropout inverso. Quando il dropout è prima della norma batch, la perdita di convalida sembra aumentare mentre la perdita di formazione diminuisce. Scenderanno entrambi nell'altro caso. Ma nel mio caso i movimenti sono lenti, quindi le cose possono cambiare dopo più allenamento ed è solo un singolo test. Sarebbe comunque gradita una risposta più definitiva e informata.