批归一化在测试期间根据批次而变化

Batch normalization changes depending on batch during test time

假设我正在使用 64 个数据点的批量大小。在训练期间,我更新均值和方差的指数移动平均值,并在测试期间使用这些平均值。

我有两个测试用例: (1) 数据点-A + 63 个其他独特的数据点, (2) datapoint-A重复64次

我期望发生的事情: 在测试期间,两种情况下数据点 A 的输出应该相同,因为平均均值和方差用于归一化。

我的实现中发生了什么: 由于归一化,每个测试用例的输出都不同,即每个测试示例的输出取决于批处理中提供的其他示例。

我的期望是不正确的,还是正确的,我需要专注于调试我的实现?

不应在测试时间内执行归一化调整。您需要区分网络的训练时间和测试时间。在训练期间,您适合规范化,一旦完成 - 计算整个训练集(或至少可表示的批次)的规范化,然后修复它并将固定的用于预测阶段。