如果在tf.layers.batch_normalization()中batch_size等于1,它会正常工作吗?

时间:2018-05-30 10:55:48

标签: tensorflow batch-normalization

大家。为了我的目的,我使用tensorflow 1.4训练像 U-net 这样的模型。由于我的硬件限制,在训练时, batch_size只能设置为1,否则会出现OOM错误。

这是我的问题。在这种情况下,当batch_size等于1时,tf.layers.batch_normalization()是否正常工作(说移动平均线,移动方差,伽玛,β)?小的batch_size会使它工作不稳定吗?

在我的工作中,我在培训时设置training=True ,在测试时设置training=False 。在训练时,我使用

logits = mymodel.inference()
loss = tf.mean_square_error(labels, logits)
updata_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
    train_op = optimizer.minimize(loss)
...

saver = tf.train.Saver(tf.global_variables())
with tf.Session() as sess:
    sess.run(tf.group(tf.global_variables_initializer(), 
                      tf.local_variables_initializer()))
    sess.run(train_op)
    ...
    saver.save(sess, save_path, global_step)

测试时,我使用:

logits = model.inference()
saver = tf.train.Saver()

with tf.Session() as sess:
    saver.restore(sess, checkpoint)
    sess.run(tf.local_variables_initializer())
    results = sess.run(logits)

有谁可以告诉我,我使用这个错误?在 tf.layers.batch_normalization() batch_size对1 的影响有多大?

任何帮助将不胜感激!提前谢谢。

1 个答案:

答案 0 :(得分:0)

是的,tf.layers.batch_normalization()适用于多个单个元素。在此类批次上执行批量规范化实际上命名为实例规范化(即单个实例的规范化)。

如果你想了解更多,@ paxim对实例规范化做了很棒的post。您还可以在网络和文献中找到更多理论,例如: Instance Normalization: The Missing Ingredient for Fast Stylization