首页 文章

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

提问于
浏览
0

我最近想在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中实现批量标准化层?提前致谢 .

1 回答

  • 2

    您不会在文档中找到有关训练x测试的任何信息 .

    Keras在其源代码中隐藏了这些内容,其想法是:

    • 当你在模型中调用 fit 和类似物时,keras的行为类似于训练模式;

    • 当你调用 evaluatepredict 和其他人时,它表现得不像训练中那样 .

    如果要查找 BatchNormalization 图层的这些差异,则必须检查其源代码 .

    我想,这里有一些东西 . 但我不会假装我理解得很好:https://github.com/fchollet/keras/blob/master/keras/layers/normalization.py#L170

相关问题