Tensorflow:差异 get_tensor_by_name 与 get_operation_by_name?

Tensorflow: difference get_tensor_by_name vs get_operation_by_name?

答案here说一个returns一个运算而另一个returns一个张量。从名称和文档中可以明显看出这一点。但是,假设我执行以下操作:

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

我正在遵循 Tensorflow Mechanics 101. Should I restore it as an operation or as a tensor? I am afraid that if I restore it as a tensor I will only get the last computed values for the logits; nonetheless, the post here 中描述的模式,这似乎表明没有区别或者我应该只使用 get_tensor_by_name。这个想法是计算一组新输入的对数,然后相应地做出预测。

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

tf.Operation

当你打电话时

op = graph.get_operation_by_name('logits')

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

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

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

tf.Tensor

另一方面,调用

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

...returns 对象 tensor,其类型为 tf.Tensor:

Represents one of the outputs of an Operation.

A Tensor is a symbolic handle to one of the outputs of an Operation. It does not hold the values of that operation's output, but instead provides a means of computing those values in a TensorFlow tf.Session.

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

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