我知道在按名称获取张量时我必须附加一个输出索引
离)
graph.get_tensor_by_name('example:0')
其中:0是输出索引。但为什么这有必要呢?
here是tensorflow文档中get_tensor_by_name的链接。但是,它没有提到指定输出索引。
答案 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
节点的已保存第二输出的引用。现在,您可以在另一个会话运行期间在自己的任务中使用此恢复的张量。