TensorFlow 如何命名张量?
How does TensorFlow name tensors?
不知这样理解是否正确:
所有的张量都是从一些操作中派生出来的,并且操作要么在构造函数中被赋予一个名称,要么被赋予特定类型操作的默认名称。如果名称不唯一,TensorFlow 会通过附加 "_1"
、"_2"
等自动处理。具有 n 个张量输出的操作将这些张量命名为 "op_name:0"
、"op_name:1"
、.. ., "op_name:n-1"
.
似乎出现了一个问题:如果 x
是 tf.Variable
,则 x.name
给出 "variable_name:0"
。这令人困惑:"variable_name"
指的是什么?
您对 Tensor
命名的观察完全正确:Tensor
的名称是
的串联
- 生成它的操作的名称,
- 冒号 (
:
),以及
- 张量在生成它的操作的输出中的索引。
因此名为 "foo:2"
的张量是位置 2 处名为 "foo"
的运算的输出(索引从零开始)。
naming of tf.Variable
对象有点奇怪。每个 tf.Variable
都包含一个 可变张量 对象,该对象保存变量(以及其他一些张量)的状态。一个 "Variable"
op(在你的例子中名称为 "variable_name"
)"produces" 这个可变张量每次都是 运行 作为它的第 0 个输出,所以可变张量的名称是 "variable_name:0"
.
由于 tf.Variable
与 tf.Tensor
几乎没有区别——因为它们可以用在相同的地方——我们决定让变量名称类似于张量名称,因此 Variable.name
属性 returns 可变张量的名称。 (这与 tf.QueueBase
and tf.ReaderBase
对象形成对比,后者 不能 直接用作张量(相反,您必须调用它们的方法来创建对其状态进行操作的操作),所以这些没有类似张量的名称。)
不知这样理解是否正确:
所有的张量都是从一些操作中派生出来的,并且操作要么在构造函数中被赋予一个名称,要么被赋予特定类型操作的默认名称。如果名称不唯一,TensorFlow 会通过附加 "_1"
、"_2"
等自动处理。具有 n 个张量输出的操作将这些张量命名为 "op_name:0"
、"op_name:1"
、.. ., "op_name:n-1"
.
似乎出现了一个问题:如果 x
是 tf.Variable
,则 x.name
给出 "variable_name:0"
。这令人困惑:"variable_name"
指的是什么?
您对 Tensor
命名的观察完全正确:Tensor
的名称是
- 生成它的操作的名称,
- 冒号 (
:
),以及 - 张量在生成它的操作的输出中的索引。
因此名为 "foo:2"
的张量是位置 2 处名为 "foo"
的运算的输出(索引从零开始)。
naming of tf.Variable
对象有点奇怪。每个 tf.Variable
都包含一个 可变张量 对象,该对象保存变量(以及其他一些张量)的状态。一个 "Variable"
op(在你的例子中名称为 "variable_name"
)"produces" 这个可变张量每次都是 运行 作为它的第 0 个输出,所以可变张量的名称是 "variable_name:0"
.
由于 tf.Variable
与 tf.Tensor
几乎没有区别——因为它们可以用在相同的地方——我们决定让变量名称类似于张量名称,因此 Variable.name
属性 returns 可变张量的名称。 (这与 tf.QueueBase
and tf.ReaderBase
对象形成对比,后者 不能 直接用作张量(相反,您必须调用它们的方法来创建对其状态进行操作的操作),所以这些没有类似张量的名称。)