Tensorflow:get_tensor_by_name 与 get_operation_by_name 的区别?

src*_*nas 4 deep-learning tensorflow tensorflow-serving

这里的答案是,一个返回一个操作,而另一个返回一个张量。从名称和文档中可以很明显地看出这一点。但是,假设我执行以下操作:

logits = tf.add(tf.matmul(inputs, weights), biases, name='logits')
Run Code Online (Sandbox Code Playgroud)

我遵循Tensorflow Mechanics 101 中描述的模式。我应该将它恢复为操作还是张量?恐怕如果我将它恢复为张量,我只会得到 logits 的最后计算值;尽管如此,这里的帖子似乎表明没有区别或者我应该只使用get_tensor_by_name. 这个想法是计算一组新输入的对数,然后相应地进行预测。

Max*_*xim 5

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

tf.Operation

你打电话时

op = graph.get_operation_by_name('logits')
Run Code Online (Sandbox Code Playgroud)

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

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

在您的情况下,(我假设)logits是根据输入占位符计算的x,因此logits如果没有特定的x.

tf.Tensor

另一方面,调用

tensor = graph.get_tensor_by_name('logits:0')
Run Code Online (Sandbox Code Playgroud)

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

表示 的输出之一Operation

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

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

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