2017-10-11 266 views
0

我最近想用批标准化的keras构建原来的文件中提及神经network.As,在批标准化测试和培训再寄一次行为不同检查文档:keras中的BatchNormalization图层如何在测试阶段实现?

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实现批标准化层? 在此先感谢。

+0

在文档中找不到关于培训x测试的任何内容。 Keras将它们隐藏在其源代码中,并且这个想法是:当你调用'fit'和类似器时,keras的行为就像在训练模式中一样。当你评估,预测和其他评估时,它的行为就像不在训练中一样。如果你想为BatchNormalization图层找到这些差异,你将不得不检查它的源代码。我想这里有一些关于它的事情。但我不会假装我理解得很好: https://github.com/fchollet/keras/blob/master/keras/layers/normalization.py#L170 –

+0

@DanielMöller,谢谢你的解释。我只是非常好奇keras中的批量规范化API,因为我曾经是一个tensorflow程序员。我想你可以重写你的答案,以便我可以接受。 – Schaffer

回答

1

在文档中找不到关于培训x测试的任何内容。

Keras那些隐藏在它的源代码,这种想法是:

  • 当你打电话fit和同类者中的典范,keras行为就像在训练模式;
  • 当你cal evaluate,predict和其他,它表现得像不在训练。

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

这里有一些关于它的事情,我想。但我不会假装我理解它:https://github.com/fchollet/keras/blob/master/keras/layers/normalization.py#L170