最初的问题是关于TensorFlow实现的。但是,答案是针对一般的实现。这个通用答案也是TensorFlow的正确答案。

在TensorFlow中使用批量归一化和辍学时(特别是使用contrib.layers),我需要担心订购吗?

如果我在退出后立即使用批处理规范化,则可能会出现问题。例如,如果批次归一化训练中的偏移量训练输出的比例尺数字较大,但随后将相同的偏移量应用于较小的比例尺数字(由于补偿了具有更多输出的比例尺),而在测试过程中没有丢失,则轮类可能关闭。 TensorFlow批处理规范化层会自动对此进行补偿吗?还是由于某种原因我不会想念这件事吗?

另外,将两者一起使用时还有其他陷阱吗?例如,假设我按照上述顺序使用了正确的顺序(假设顺序正确),那么在多个连续的层上同时使用批处理规范化和辍学是否会遇到麻烦?我没有立即看到问题,但是我可能会丢失一些东西。

非常感谢!

更新:

实验测试似乎表明排序确实很重要。我在相同的网络上运行了两次,但只执行批处理规范,而辍学则相反。当辍学在批处理规范之前时,验证损失似乎会随着培训损失的减少而上升。在其他情况下,它们都下降了。但就我而言,运动很慢,因此在接受更多培训后情况可能会发生变化,这只是一次测试。一个更加明确和明智的答案仍然会受到赞赏。

最佳答案

作者在Ioffe and Szegedy 2015中指出:“我们要确保对于任何参数值,网络始终以期望的分布产生激活”。因此,批处理规范化层实际上是在转换层/完全连接层之后,但在馈入ReLu(或任何其他种类的)激活之前插入的。有关详细信息,请在大约53分钟的时间查看this video

就辍学而言,我相信辍学是在激活层之后应用的。在dropout paper图3b中,将隐藏层l的丢失因子/概率矩阵r(l)应用于y(l),其中y(l)是应用激活函数f之后的结果。

因此,总而言之,使用批处理规范化和退出的顺序为:

-> CONV/FC-> BatchNorm-> ReLu(或其他激活)->退出-> CONV/FC->

08-20 02:17