Tensorflow:差异get_tensor_by_name vs get_operation_by_name?

问题描述 投票:3回答:1

回答here说一个人返回一个操作,而另一个人返回一个张量。从名称和文档中可以看出这一点。但是,假设我执行以下操作:

logits = tf.add(tf.matmul(inputs, weights), biases, name='logits')

我遵循Tensorflow Mechanics 101中描述的模式。我应该将其恢复为手术还是张力?我担心如果我将其恢复为张量,我将只获得logits的最后计算值;尽管如此,后here,似乎表明没有区别或我应该只使用get_tensor_by_name。我们的想法是计算一组新输入的logits,然后相应地进行预测。

tensorflow deep-learning tensorflow-serving
1个回答
4
投票

简短的回答:你可以同时使用get_operation_by_name()get_tensor_by_name()。答案很长:

tf.Operation

你打电话的时候

op = graph.get_operation_by_name('logits')

...它返回一个tf.Operation类型的实例,它是计算图中的一个节点,它在其输入上执行一些操作并产生一个或多个输出。在这种情况下,它是一个plus操作。

人们可以随时评估会话中的操作,如果此操作需要输入一些placehoder值,引擎将强制您提供它们。一些操作,例如读取变量,没有任何依赖关系,并且可以在没有占位符的情况下执行。

在你的情况下,(我假设)logits是从输入占位符x计算的,所以logits没有特定的x没有任何值。

tf.Tensor

另一方面,打电话

tensor = graph.get_tensor_by_name('logits:0')

...返回一个对象tensor,其类型为tf.Tensor

代表Operation的一个输出。

TensorOperation输出之一的象征性句柄。它不保存该操作的输出值,而是提供在TensorFlow tf.Session中计算这些值的方法。

因此,换句话说,张量评估与操作执行相同,并且上述所有限制也适用。

为什么Tensor有用?可以将Tensor作为输入传递给另一个Operation,从而形成图形。但在您的情况下,您可以假设两个实体的含义相同。

© www.soinside.com 2019 - 2024. All rights reserved.