了解 tf.name_scope

问题描述 投票:0回答:1

我试图理解tf.name_scope。文档中提到了以下内容。

"这个上下文管理器推送了一个名字范围,它将使所有在它里面添加的操作的名字都有一个前缀。

例如,要定义一个新的Python操作,名为my_op。

def my_op(a, b, c, name=None):
  with tf.name_scope("MyOp") as scope:
    a = tf.convert_to_tensor(a, name="a")
    b = tf.convert_to_tensor(b, name="b")
    c = tf.convert_to_tensor(c, name="c")
    # Define some computation that uses `a`, `b`, and `c`.
    return foo_op(..., name=scope)

当执行时,Tensors a, b, c, 将会有MyOpa, MyOpb, 和MyOpc的名字。"

我的理解是,在Python中,with块并没有引入一个新的局部作用域。正常情况下,张量变量a也会引用函数my_op的局部参数a。 使用Python上下文如何实现名称前缀为 "MyOp"?在tf.name_scope( )的源码链接中。https:/github.comtensorflowtensorflowblobv2.2.0tensorflowpythonframeworkops.py#L6423-L6442。)有一个调用

ctx = context.context()

但我找不到 context.context()的语义。大多数上下文管理器的讨论都是关于 进入退出但没有提到用某个前缀重命名变量。这是不是Python中的一些内省机制,允许对Python变量作用域进行操作?非常感谢你的任何见解。

python tensorflow variables scope
1个回答
0
投票

名称作用域完全是为了方便命名。它与python的作用域没有任何关系。每当你在tensorflow中执行一个操作时,它都会根据tensorflow维护的一些状态得到一个名字,但是如果你想让这些操作在你的用例中被清楚地命名,那么就会使用name scope。任何在name scope内的操作都会在它的名字中附加提供的值,没有更多的用途。关于实现,我非常怀疑那些作用域的实现是否会在python中暴露出来。所有的张量创建操作都是由tensorflow的C++后端执行的,所以作用域应该主要由他们来处理。

© www.soinside.com 2019 - 2024. All rights reserved.