我想将tf.name_scope
用于这样的事情:
my_scope = tf.name_scope('something')
if cond_1:
foo(my_scope)
if cond_2:
bar(my_scope)
我想避免使用with tf.name_scope('something') as scope
表示法,因为我不知道何时第一次使用名称范围something
。
简单的my_scope = tf.name_scope('something')
不起作用,导致错误TypeError: expected string or buffer
。
现在我使用:
with tf.name_scope('something') as scope:
pass
my_scope = scope
if cond_1:
foo(my_scope)
if cond_2:
bar(my_scope)
有效,但非常不满意。
答案 0 :(得分:1)
我不确定foo
和bar
应该做什么,但上面提供的代码段中的两个my_scope
完全不同。
第一个my_scope
是context manager,即contextlib.GeneratorContextManager
个实例。第二个my_scope
(就像scope
)是一个普通字符串,即"something/"
(请参阅source code)。只用my_scope="something/"
就可以达到完全相同的效果。基于错误 TypeError:期望的字符串或缓冲区,这正是foo
和bar
所期望的 - 字符串。
另请注意,您可以获取有关上下文的参考,并随时输入。 tf.name_scope
只需将名称推送到堆栈顶部,然后在退出时将其弹出。但是,如果您多次输入相同的名称范围,则会获得后缀:_1
,_2
,...