您对Tensor
命名的观察是绝对正确的: Tensor
的名称是
- 产生它的操作的名称,
- 冒号(
:
),和 - 张量在产生它的操作的输出中的索引。
因此,名为"foo:2"
的张量是位置2(索引从零开始)的名为"foo"
的操作的输出。
tf.Variable
对象的命名有点奇怪。每个tf.Variable
包含一个可变的张量对象,该对象保存变量(和其他一些张量)的状态。每当它作为第0输出运行时, "Variable"
op(在您的示例中名称为"variable_name"
)“生成”此可变张量,因此可变张量的名称为"variable_name:0"
。
由于tf.Variable
主要是从区分tf.Tensor
-in,它可以在相同的使用场所,我们采取的决定,使变量名称类似于张量的名字,所以Variable.name
属性返回可变张名。 (这与tf.QueueBase
和tf.ReaderBase
对象相反,后者不能直接用作张量(相反,您必须调用它们的方法来创建在其状态下运行的操作),因此它们没有类似于张量的名称。 )
0
我想知道这是否是正确的理解:
所有张量都从某个操作派生而来,或者在构造函数中为操作指定名称,或者为特定类型的操作指定默认名称。如果名称不是唯一的,TensorFlow会通过添加
"_1"
,"_2"
等自动处理此问题。使用n个张量的操作将这些张量的名称命名为"op_name:0"
,"op_name:1"
,...,"op_name:n-1"
。似乎出现了一个问题:如果
x
是tf.Variable
,则x.name
给出"variable_name:0"
。这令人困惑:"variable_name"
指的是什么?