我希望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能够识别声明为同时属于两个不同名称范围的变量。
答案 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>]