TensorFlow如何命名张量?

时间:2016-03-22 09:40:16

标签: tensorflow

我想知道这是否正确理解:

所有张量都是从某些操作派生的,并且操作在构造函数中被赋予名称,或者给定特定类型操作的默认名称。如果名称不是唯一的,TensorFlow会通过附加"_1""_2"等自动处理此问题。具有n张量输出的操作会将这些张量命名为"op_name:0""op_name:1",.. 。,"op_name:n-1"

似乎出现了一个问题:如果xtf.Variable,则x.name"variable_name:0"。这令人困惑:"variable_name"引用了什么?

1 个答案:

答案 0 :(得分:43)

您对Tensor命名的观察是绝对正确的:Tensor的名称是

的串联
  1. 生成它的操作的名称,
  2. 冒号(:)和
  3. 产生它的操作的输出中的张量的索引。
  4. 因此,名为"foo:2"的张量是位于第2位的op "foo"的输出(索引从零开始)。

    namingtf.Variable个对象有点奇怪。每个tf.Variable都包含一个可变张量对象,该对象保存变量的状态(以及一些其他张量)。 "Variable" op(在您的示例中名称为"variable_name")"生成"这个可变张量每次作为第0个输出运行时,因此可变张量的名称为"variable_name:0"

    由于tf.Variabletf.Tensor几乎无法区分 - 因为它可以在相同的位置使用 - 我们决定使变量名称类似于张量名称,因此{{1} } property返回可变张量的名称。 (这与tf.QueueBasetf.ReaderBase对象形成对比,这些对象可直接用作张量(而是必须调用它们上的方法来创建对其状态进行操作的操作),所以这些没有类似张量的名字。)