是否可以在TensorFlow中重新输入现有的名称范围?

时间:2016-08-12 00:36:09

标签: python tensorflow

两次输入相同名称的名称范围:

c = tf.constant(1)
with tf.name_scope("test"):
    a = tf.add(c, c)
with tf.name_scope("test"):
    b = tf.add(a, a)

会导致创建两个名称范围:testtest_1

是否可以在单独的上下文管理器中重新输入范围而不是创建新范围?

2 个答案:

答案 0 :(得分:4)

事实证明它真的很容易。调查TensorFlow的framework/ops.py显示添加" /"对作用域的名称不会使作用域名称唯一,从而有效地重新进入现有作用域。例如:

c = tf.constant(1)
with tf.name_scope("test"):
    a = tf.add(c, c)
with tf.name_scope("test/"):
    b = tf.add(a, a)

答案 1 :(得分:3)

虽然您在your answer中建议的解决方案今天可以使用,但它依赖于tf.name_scope()的内部实施细节,因此可能并不总是有效。相反,重新输入范围的推荐方法是在第一个with语句中捕获,并在第二个中使用该值,如下所示:

c = tf.constant(1)
with tf.name_scope("test") as scope:
    a = tf.add(c, c)
with tf.name_scope(scope):
    b = tf.add(a, a)

您还可以将捕获的scope作为运算符的名称传递,这就是我们通常表示由其他运算符组合构建的函数的输出:

c = tf.constant(1)
with tf.name_scope("test") as scope:
    a = tf.add(c, c)
return tf.add(a, a, name=scope)  # return value gets the scope prefix as its name.