如何在 Keras 的测试期间使用 Batch Normalization?
Posted
技术标签:
【中文标题】如何在 Keras 的测试期间使用 Batch Normalization?【英文标题】:How do I use Batch Normalization during test time in Keras? 【发布时间】:2017-10-25 08:51:23 【问题描述】:我目前正在尝试在 Keras 中使用 Batch Normalization 实现模型。我已经成功地在培训阶段实施了它。
但是,对于测试,Batch Normalization 在进行网络前向传递之前计算整个总体的统计数据(均值和方差)(预先计算 BN 均值和方差,然后保持静态;这是相反的)到训练阶段,均值和方差由批次决定)。
我关于 Keras 的问题是:
假设 (X, y) 是整个人口。 假设 (X_batch, y_batch) 是一个批次(整个种群的一个子集)
如果我使用
model.test_on_batch(X_batch, y_batch)
如何将 X 和 y 的整个总体的均值和方差传递给批量归一化层?有什么办法可以让 keras 自动处理这个问题?
【问题讨论】:
我回答你的问题了吗? @MaxB,是的,你做到了,非常感谢!它没有解决我的问题,但你回答了我的问题:) 【参考方案1】:如何将 X 和 y 的整个总体的均值和方差传递给批标准化层?有什么办法可以让 keras 自动处理这个问题?
Keras 应该这样做(在足够新的版本中):
https://github.com/fchollet/keras/issues/81
要仔细检查,您可能想在测试/预测时尝试batch_size=1
,如果 Keras 无法使用全局统计信息,您可能会看到非常糟糕的结果。
【讨论】:
以上是关于如何在 Keras 的测试期间使用 Batch Normalization?的主要内容,如果未能解决你的问题,请参考以下文章
在 Keras 的批量训练期间显示每个 epoch 的进度条