最初的问题是关于TensorFlow具体实现的。但是,这些答案一般适用于实现。这个一般答案也是TensorFlow的正确答案。
当在TensorFlow中使用批处理归一化和dropout(特别是使用contrib.layers)时,我需要担心排序吗?
It seems possible that if I use dropout followed immediately by batch normalization there might be trouble. For example, if the shift in the batch normalization trains to the larger scale numbers of the training outputs, but then that same shift is applied to the smaller (due to the compensation for having more outputs) scale numbers without dropout during testing, then that shift may be off. Does the TensorFlow batch normalization layer automatically compensate for this? Or does this not happen for some reason I'm missing?
此外,在同时使用这两者时,还有其他需要注意的缺陷吗?例如,假设我以正确的顺序使用它们(假设有正确的顺序),在多个连续层上同时使用批处理规范化和dropout会有麻烦吗?我不认为这有什么问题,但我可能遗漏了一些东西。
非常感谢!
更新:
一项实验测试似乎表明,排序确实很重要。我用批处理规范和dropout反向运行了相同的网络两次。当dropout在批数范数之前时,验证损失呈上升趋势,而训练损失呈下降趋势。在另一种情况下它们都是向下的。但我的动作很慢,所以经过更多的训练,情况可能会发生变化,这只是一次测试。一个更明确和更明智的答案仍然是值得赞赏的。