两次输入相同名称的名称范围:
c = tf.constant(1)
with tf.name_scope("test"):
a = tf.add(c, c)
with tf.name_scope("test"):
b = tf.add(a, a)
会导致创建两个名称范围:test
和test_1
。
是否可以在单独的上下文管理器中重新输入范围而不是创建新范围?
答案 0 :(得分:4)
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.