Tensorflow:没有'with'

时间:2017-11-01 14:09:19

标签: python machine-learning tensorflow deep-learning

我想将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)

有效,但非常不满意。

1 个答案:

答案 0 :(得分:1)

我不确定foobar应该做什么,但上面提供的代码段中的两个my_scope完全不同。

第一个my_scopecontext manager,即contextlib.GeneratorContextManager个实例。第二个my_scope(就像scope)是一个普通字符串,即"something/"(请参阅source code)。只用my_scope="something/"就可以达到完全相同的效果。基于错误 TypeError:期望的字符串或缓冲区,这正是foobar所期望的 - 字符串。

另请注意,您可以获取有关上下文的参考,并随时输入。 tf.name_scope只需将名称推送到堆栈顶部,然后在退出时将其弹出。但是,如果您多次输入相同的名称范围,则会获得后缀:_1_2,...