张量名称可以在Tensorflow中属于不同的名称范围吗?

时间:2019-04-10 15:16:04

标签: python tensorflow

我希望Tensorflow中的张量和变量属于不同的名称范围,以便我可以通过选择变量的不同子集来构建不同的训练操作。

例如,此代码似乎无效:

tf.reset_default_graph()
with tf.variable_scope("foo"):
    with tf.variable_scope("bar"):
        v=tf.get_variable("v",[1])
        print(v.name)
print(tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='foo'))
print(tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='bar'))

因为我得到了输出:

foo/bar/v:0
< tf.Variable 'foo/bar/v:0' shape=(1,) dtype=float32_ref >
[]

相反,我希望tensorflow能够识别声明为同时属于两个不同名称范围的变量。

1 个答案:

答案 0 :(得分:0)

TensorFlow中的名称范围是分层的,因此您的bar范围实际上是foo/bar,您应该这样查询它:

print(tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='foo'))
print(tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope='foo/bar'))

打印:

[<tf.Variable 'foo/bar/v:0' shape=(1,) dtype=float32_ref>]
[<tf.Variable 'foo/bar/v:0' shape=(1,) dtype=float32_ref>]