keras中的BatchNormalization层在测试阶段是如何实现的?

keras中的BatchNormalization层在测试阶段是如何实现的?,keras,batch-normalization,Keras,Batch Normalization,我最近想在keras中使用批量归一化来构建一个神经网络。正如最初的论文所提到的,批量归一化在测试和训练时间上表现不同。我查看了文档: keras.layers.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros',

我最近想在keras中使用批量归一化来构建一个神经网络。正如最初的论文所提到的,批量归一化在测试和训练时间上表现不同。我查看了文档:

keras.layers.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, 
center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', 
moving_mean_initializer='zeros', moving_variance_initializer='ones', 
beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, 
gamma_constraint=None)
我没有看到任何参数来判断它是处于培训阶段还是测试阶段,这与tensorflow的实现不同:

batch_norm(
inputs,
decay=0.999,
center=True,
scale=False,
epsilon=0.001,
activation_fn=None,
param_initializers=None,
param_regularizers=None,
updates_collections=tf.GraphKeys.UPDATE_OPS,
is_training=True,
reuse=None,
variables_collections=None,
outputs_collections=None,
trainable=True,
batch_weights=None,
fused=False,
data_format=DATA_FORMAT_NHWC,
zero_debias_moving_mean=False,
scope=None,
renorm=False,
renorm_clipping=None,
renorm_decay=0.99
)
我想知道在测试阶段,批处理规范化层是如何在keras中实现的?
提前感谢。

您在文档中找不到有关training x测试的任何内容

Keras将这些隐藏在其源代码中,其思想是:

  • 当您在模型中调用
    fit
    和类似项时,keras的行为类似于训练模式
  • 当您校准
    评估
    预测
    等时,它的行为与未在培训中类似
如果要查找
BatchNormalization
层的这些差异,必须检查其源代码


我想这是有点道理的。但我不会假装我很了解它:

您在文档中找不到关于training x测试的任何内容。Keras将这些隐藏在其源代码中,其思想是:当您调用
fit
和类似程序时,Keras的行为类似于训练模式。当您校准
评估
预测
等时,它的行为与未在培训中类似。如果要查找BatchNormalization层的这些差异,必须检查其源代码。我想这是有点道理的。但我不会假装我很明白:@Daniel Möller,谢谢你的解释。我只是对keras中的批处理规范化API非常好奇,因为我曾经是tensorflow程序员。我想你可以重写你的答案,这样我就可以接受了。