【问题标题】:How is BatchNormalization layer in keras implemented in test phase?keras 中的 BatchNormalization 层在测试阶段是如何实现的?
【发布时间】:2018-03-23 04:09:40
【问题描述】:

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

【问题讨论】:

  • 您不会在文档中找到任何关于训练 x 测试的信息。 Keras 将这些隐藏在其源代码中,其想法是:当您调用 fit 和类似名称时,keras 的行为就像在训练模式下一样。当你调用evaluatepredict 和其他人时,它的行为就像不在训练中一样。如果您想找到 BatchNormalization 层的这些差异,则必须检查其源代码。我猜这里有一些关于它的东西。但我不会假装我很了解:github.com/fchollet/keras/blob/master/keras/layers/…
  • @Daniel Möller,感谢您的解释。我只是对keras中的批处理规范化API很好奇,因为我曾经是一名tensorflow程序员。我认为你可以重写你的答案以便我接受。

标签: keras batch-normalization


【解决方案1】:

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

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

  • 当您在模型中调用fit 和类似名称时,keras 的行为就像在训练模式下一样;
  • 当你调用evaluatepredict 和其他人时,它的行为就像不在训练中一样。

如果您想找到BatchNormalization 层的这些差异,您必须检查其源代码。

我猜这里有一些关于它的东西。但我不会假装我很明白:https://github.com/fchollet/keras/blob/master/keras/layers/normalization.py#L170

【讨论】:

    猜你喜欢
    • 2018-01-08
    • 2018-05-14
    • 2018-10-14
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2019-03-04
    • 2021-03-16
    • 2021-11-19
    相关资源
    最近更新 更多