我正在努力在我的工作中使用多GPU塔式defs,但它似乎有错误:损失太大而且没有更新。
我认为问题来自以下代码:
# Calculate the gradients for each model tower.
tower_grads = []
for i in xrange(num_gpus):
with tf.device('/gpu:%d' % i):
with tf.name_scope('%s_%d' % (TOWER_NAME, i)) as scope:
loss = tower_loss(scope)
####### HERE #######
# Reuse variables for the next tower.
tf.get_variable_scope().reuse_variables()
####################
grads = opt.compute_gradients(loss)
tower_grads.append(grads)
print(tf.get_variable_scope().reuse_variables())
打印None
。
您认为问题是什么?
我只使用INFERENCE中的CONV1,CONV2,FC3,FC4设置variable_scope,就像在cifar10_multi_gpu_train.py
中一样。
答案 0 :(得分:3)
您的代码没有问题,至少没有tf.get_variable_scope().reuse_variables()
。
函数reuse_variables()
将始终生成None
。它唯一的功能是将当前范围的属性reuse
设置为True
。
我认为你把它误认为是一个会返回当前范围内所有变量的函数。
答案 1 :(得分:0)
请参阅source code,因为您可以看到它没有回复。因此,你可以得到和打印出来的只是无。以下是相关摘录:
def reuse_variables(self):
"""Reuse variables in this scope."""
self._reuse = True
实际上,它只是打开_reuse。