【问题标题】:Tensorflow: difference get_tensor_by_name vs get_operation_by_name?Tensorflow:get_tensor_by_name 与 get_operation_by_name 的区别?
【发布时间】:2018-06-09 21:44:17
【问题描述】:

答案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】:

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

tf.Operation

当你打电话时

op = graph.get_operation_by_name('logits')

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

人们总是可以在会话中评估一个操作,如果这个操作需要一些占位符值来输入,引擎将强制你提供它们。一些操作,例如读取一个变量,没有任何依赖,可以在没有占位符的情况下执行。

在您的情况下,(我假设)logits 是根据输入占位符 x 计算得出的,因此如果没有特定的 xlogits 就没有任何价值。

tf.Tensor

另一方面,调用

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

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

表示Operation 的输出之一。

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 2011-11-19
  • 2013-03-14
  • 2017-11-13
  • 1970-01-01
  • 2014-08-19
相关资源
最近更新 更多