为什么get_tensor_by_name需要将一个端口附加到张量名称

时间:2017-01-03 22:01:16

标签: python tensorflow

我知道在按名称获取张量时我必须附加一个输出索引

离)

graph.get_tensor_by_name('example:0')

其中:0是输出索引。但为什么这有必要呢?

here是tensorflow文档中get_tensor_by_name的链接。但是,它没有提到指定输出索引。

2 个答案:

答案 0 :(得分:10)

在TensorFlow中,名称被赋予tf.Operation个对象(对应于tf.Graph中的节点),tf.Tensor对象被命名为生成它的tf.Operation作为输出。

由于tf.Operation可以有多个输出,要唯一地命名tf.Tensor,我们将其索引作为其名称的一部分包含在输出中。

因此,我们为tf.Tensor对象的名称选择了以下格式,该格式也是tf.Tensor.name属性返回的值:

<name of operation>:<index of output>

答案 1 :(得分:0)

理解get_tensor_by_name函数的关键是要意识到在构建阶段首先将TensorFlow模型指定为图形。在该问题中,example是此图中操作节点的名称。在执行阶段运行此操作时,此example节点将生成输出。此输出由指示其生产订单的数字编制索引。在这种情况下,它是1

上述图表及其输出在早期运行期间保存。稍后在另一个项目执行中,可能使用tf.train.import_meta_graph恢复此运行时状态,graph成为对它的引用。函数get_tensor_by_name只是从恢复的运行时元图中恢复对example节点的已保存第二输出的引用。现在,您可以在另一个会话运行期间在自己的任务中使用此恢复的张量。