原问题涉及 Tensorflow 实现,但是回答适用于一般实现。这个通用的回答同样适用于TensorFlow。
在使用TensorFlow(特别是使用 contrib.layers)时,使用批量归一化和丢弃操作时,我需要担心顺序吗?
如果我在丢弃操作之后立即使用批量归一化,可能会出现问题。例如,如果批量归一化中的偏移训练到更大规模的输出数量,但在测试期间,由于有更多的输出,对较小规模的数字进行补偿而没有使用丢弃操作,则该偏移可能不准确。TensorFlow 批量归一化层是否会自动进行补偿?或者出于某种我没注意到的原因,这种情况不会发生?
另外,在同时使用这两个操作时,还有其他要注意的问题吗?例如,假设我按照上述正确的顺序使用它们(假设有正确的顺序),在连续的多个层上同时使用批量归一化和丢弃操作会有问题吗?我并没有立即看到其中的问题,但也许是我遗漏了什么。
非常感谢!
更新:
一次实验性测试似乎表明顺序确实很重要。我用相同的网络分别运行了两次,只是批量归一化和丢弃操作的顺序相反。当丢弃操作在批量归一化之前时,验证损失似乎会随着训练损失下降而上升。在另一种情况下,它们都在下降。但是我的情况变化缓慢,因此在更多训练后可能会改变,这只是一个单独的测试。仍然需要一个更确定和知情的答案。