TensorFlow 如何命名张量?

Posted

技术标签:

【中文标题】TensorFlow 如何命名张量?【英文标题】:How does TensorFlow name tensors? 【发布时间】:2016-07-09 03:07:41 【问题描述】:

不知道这是不是正确的理解:

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

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

【问题讨论】:

【参考方案1】:

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

的串联
    产生它的操作的名称, 冒号 (:) 和 该张量在产生它的操作的输出中的索引。

因此,名为 "foo:2" 的张量是名为 "foo" 的操作在位置 2 的输出(索引从零开始)。

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

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

【讨论】:

有没有一种简单的方法来产生输出名称?没有 pb 文件,只有检查点? 有没有一个例子来说明规则 3:产生它的操作的输出中该张量的索引? @Alpha Sure: print(tf.split([0, 1, 2, 3, 4, 5], 5, name="split_op")[3].name),在"split_op" 的输出中打印索引 3 处的张量名称,将打印"split_op:3" @mrry 挑剔:应该是 print(tf.split([0, 1, 2, 3, 4], 5, name="split_op")[3].name) (Array大小为 6 的不分为 5 个部分)。感谢您的评论,顺便说一句,它为我清除了一切。

以上是关于TensorFlow 如何命名张量?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow(4) 张量属性:维数、形状、数据类型

tensorflow中张量(tensor)的属性——维数(阶)形状和数据类型

如何在 pytorch 和 tensorflow 中使用张量核心?

如何使用 TensorFlow 连接两个具有不同形状的张量?

如何在 TensorFlow 中交换张量轴?

如何将Tensorflow张量尺寸(形状)作为int值?