python - 了解 tf.name_scope
问题描述
我想了解 tf.name_scope。该文档提到以下内容:
“这个上下文管理器推送一个名称范围,这将使添加在其中的所有操作的名称都有一个前缀。
例如,要定义一个名为 my_op 的新 Python 操作:
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)
执行时,张量 a、b、c 将具有名称 MyOp/a、MyOp/b 和 MyOp/c。”
我的理解是 with 块不会在 Python 中引入新的本地范围。一般情况下,张量变量a也会引用函数my_op的局部参数a。如何使用 Python 上下文实现以“MyOp/”为前缀的名称?在 tf.name_scope 的源代码链接(https://github.com/tensorflow/tensorflow/blob/v2.2.0/tensorflow/python/framework/ops.py#L6423-L6442)中有一个调用
ctx = context.context()
但我找不到 context.context() 的语义。大多数上下文管理器讨论都讨论了enter和exit,但没有提到带有一些前缀的变量重命名。这是 Python 中允许操纵 Python 变量范围的一些内省机制吗?非常感谢您的任何见解。
解决方案
名称范围完全是为了命名方便。它与python范围无关。每当您在 tensorflow 中执行操作时,它将根据 tensorflow 维护的某些状态获得一个名称,但如果您希望为您的用例明确命名这些操作,则使用名称范围。名称范围内的任何操作都将在其名称中附加提供的值,仅此而已。关于实现,我非常怀疑这些范围实现是否会在 python 中公开。所有的张量创建操作都由 tensorflow 的 C++ 后端执行,所以作用域应该主要由它们处理
推荐阅读
- vba - 如何让高级组合框具有正常的下拉菜单?
- angular - AWS-Angular-docker 不工作
- c# - WPF 以编程方式为平板电脑启用 TextBox 滚动/平移
- visual-studio-2017 - 如何从 Visual Studio 中查看 .sdf 内容
- c - C编程,atoi函数
- html - 我的@media 查询有问题
- python - Pandas Series.Shift 截断最后一个值
- string - 通过硬编码键检索 dict 值,有效。通过计算键检索不会。为什么?
- if-statement - 批发商店 - 如果声明不起作用
- javascript - 在整个页面上注册任何点击href