TensorFlow 如何命名张量?

How does TensorFlow name tensors?

不知这样理解是否正确:

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

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

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

的串联
  1. 生成它的操作的名称,
  2. 冒号 (:),以及
  3. 张量在生成它的操作的输出中的索引。

因此名为 "foo:2" 的张量是位置 2 处名为 "foo" 的运算的输出(索引从零开始)。

naming of tf.Variable对象有点奇怪。每个 tf.Variable 都包含一个 可变张量 对象,该对象保存变量(以及其他一些张量)的状态。一个 "Variable" op(在你的例子中名称为 "variable_name")"produces" 这个可变张量每次都是 运行 作为它的第 0 个输出,所以可变张量的名称是 "variable_name:0".

由于 tf.Variabletf.Tensor 几乎没有区别——因为它们可以用在相同的地方——我们决定让变量名称类似于张量名称,因此 Variable.name 属性 returns 可变张量的名称。 (这与 tf.QueueBase and tf.ReaderBase 对象形成对比,后者 不能 直接用作张量(相反,您必须调用它们的方法来创建对其状态进行操作的操作),所以这些没有类似张量的名称。)