A pergunta original era especificamente com relação às implementações do TensorFlow. No entanto, as respostas são para implementações em geral. Essa resposta geral também é a resposta correta para o TensorFlow.
Ao usar normalização em lote e dropout no TensorFlow (especificamente usando contrib.layers), preciso me preocupar com o pedido?
Parece possível que, se eu usar o dropout seguido imediatamente pela normalização em lote, possa haver problemas. Por exemplo, se a mudança na normalização do lote treina para os números da escala maior das saídas de treinamento, mas então essa mesma mudança é aplicada aos números da escala menor (devido à compensação por ter mais saídas) sem abandono durante o teste, então isso o turno pode estar desligado. A camada de normalização de lote do TensorFlow compensa isso automaticamente? Ou isso não acontece por algum motivo que estou perdendo?
Além disso, há outras armadilhas a serem observadas ao usar esses dois juntos? Por exemplo, supondo que estou usá-los na ordem correcta no que diz respeito ao acima (assumindo que não é uma ordem correcta), pode haver problemas com o uso de tanto a normalização em lotes e abandono em várias camadas sucessivas? Não vejo imediatamente um problema nisso, mas posso estar faltando alguma coisa.
Muito obrigado!
ATUALIZAR:
Um teste experimental parece sugerir que ordenação faz importa. Executei a mesma rede duas vezes apenas com a norma batch e dropout reverso. Quando o abandono ocorre antes da norma do lote, a perda de validação parece aumentar à medida que a perda de treinamento diminui. Ambos estão caindo no outro caso. Mas no meu caso os movimentos são lentos, então as coisas podem mudar depois de mais treinamento e é apenas um único teste. Uma resposta mais definitiva e informada ainda seria apreciada.