我遵循了CIFAR10 multi-gpu的示例,现在我正在尝试使我的程序与批处理规范化层一起使用。
我研究了https://github.com/tensorflow/tensorflow/issues/7439和How do I use Batch Normalization in a multi-gpu setting in TensorFlow?。
我不打算做任何“幻想”,因此,出于我的目的,仅使用单个塔的均值和方差完全可以。
with tf.variable_scope(tf.get_variable_scope()):
for i in range(num_gpu):
with tf.device("/gpu:{}".format(i)):
with tf.name_scope("gpu_{}".format(i)) as scope:
loss = tower_loss(scope...)
tf.get_variable_scope().reuse_variables()
batchnorm_updates = tf.get_collection(
tf.GraphKeys.UPDATE_OPS, scope)
grads = opt.compute_grads(loss)
tower_grads.append(grads)
我得到的当前错误是“ ValueError:变量batch_normalization / gamma不存在,或者不是使用tf.get_variable()创建的。您是要在VarScope中设置复用= tf.AUTO_REUSE吗?”
但是,当我设置了reuse = tf.AUTO_REUSE时,出现了与batch_size有关的错误。