我想知道这是否正确理解:
所有张量都是从某些操作派生的,并且操作在构造函数中被赋予名称,或者给定特定类型操作的默认名称。如果名称不是唯一的,TensorFlow会通过附加"_1"
,"_2"
等自动处理此问题。具有n张量输出的操作会将这些张量命名为"op_name:0"
,"op_name:1"
,.. 。,"op_name:n-1"
。
似乎出现了一个问题:如果x
是tf.Variable
,则x.name
会"variable_name:0"
。这令人困惑:"variable_name"
引用了什么?
答案 0 :(得分:43)
您对Tensor
命名的观察是绝对正确的:Tensor
的名称是
:
)和因此,名为"foo:2"
的张量是位于第2位的op "foo"
的输出(索引从零开始)。
naming个tf.Variable
个对象有点奇怪。每个tf.Variable
都包含一个可变张量对象,该对象保存变量的状态(以及一些其他张量)。 "Variable"
op(在您的示例中名称为"variable_name"
)"生成"这个可变张量每次作为第0个输出运行时,因此可变张量的名称为"variable_name:0"
。
由于tf.Variable
与tf.Tensor
几乎无法区分 - 因为它可以在相同的位置使用 - 我们决定使变量名称类似于张量名称,因此{{1} } property返回可变张量的名称。 (这与tf.QueueBase
和tf.ReaderBase
对象形成对比,这些对象不可直接用作张量(而是必须调用它们上的方法来创建对其状态进行操作的操作),所以这些没有类似张量的名字。)