张量流批量归一化导致高测试损失

时间:2017-11-28 17:21:54

标签: machine-learning tensorflow neural-network deep-learning batch-normalization

我一直在尝试在张量流中使用批量标准化,但没有成功。 训练损失很好地收敛(比没有BN更好),但整个训练期间测试损失仍然很高。我使用批量大小为1,但问题仍然是批量更大的问题。 我目前正在做的是:

inputs = tf.layers.batch_normalization(
    inputs=inputs, axis=1 if data_format == 'channels_first' else 3,
    momentum== 0.997, epsilon=1e-5, center=True,
    scale=True, training=is_training, fused=True)
inputs = tf.nn.relu(inputs)

is_training是tf.placeholder,我在训练期间指定为True,在测试期间指定为False,对于训练操作,我执行此操作:

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
    train_op = optimizer.minimize(loss, global_step=batch)

我已经尝试过" tf.contrib.layers.batch_norm"我也在网上找到了BN的其他几种实现方式。但没有任何作用..我总是遇到同样的问题。

我知道测试期间正在更新beta和gamma变量。 但我也注意到tf.get_collection(tf.GraphKeys.MOVING_AVERAGE_VARIABLES)是一个空集合,这很奇怪。

之前有没有人见过并解决过这个问题? 我想不出更多的事情要尝试。

注意:我知道问题出在BN上,因为如果没有它,测试损失会随着训练的增加而减少。

0 个答案:

没有答案