在这里,我尝试使用一个变量创建一个简单的模型,但在所有gpus中都是相同的。我试着初始化变量。但是,我没有正确初始化它。
import tensorflow as tf
def test_model(num):
mu = 1.0
sigma = 0.1
with tf.variable_scope("same_on_all_gpu", reuse=True):
var1 = tf.Variable(tf.truncated_normal(shape=(1,1), mean = mu, stddev = sigma))
return tf.add(var1, num)
with tf.device("/gpu:" + str(0)):
with tf.name_scope('%s_%d' % ("tower_gpu", 0)) as scope:
ret0 = test_model([[0]])
with tf.device("/gpu:" + str(1)):
with tf.name_scope('%s_%d' % ("tower_gpu", 1)) as scope:
ret1 = test_model([[1]])
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
r0, r1 = sess.run([ret0,ret1],{})
print("r0 " + str(r0))
print("r1 " + str(r1))
我得到了这个输出:
r0 [[ 0.]]
r1 [[ 0.]]
答案 0 :(得分:0)
我无法测试您的代码,但我认为当test_model
返回时,您将保留用于创建变量的same_on_all_gpu
范围。
在reuse
中将True
设置为等于tf.variable_scope
,可以访问当前作用域及其子作用域中的变量,但不能访问当前作用域之外的变量。 / p>