小编典典

如何在 TensorFlow 中打印张量对象的值?

all

我一直在使用 TensorFlow 中矩阵乘法的介绍性示例。

matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)

当我打印产品时,它会将其显示为一个Tensor对象:

<tensorflow.python.framework.ops.Tensor object at 0x10470fcd0>

但我怎么知道 的价值product

以下没有帮助:

print product
Tensor("MatMul:0", shape=TensorShape([Dimension(1), Dimension(1)]), dtype=float32)

我知道图形在 上运行Sessions,但是没有任何方法可以检查Tensor对象的输出而不在 a 中运行图形session吗?


阅读 131

收藏
2022-04-21

共1个答案

小编典典

评估对象实际值的最简单[A]Tensor方法是将其传递给Session.run()方法,或Tensor.eval()在您有默认会话时调用(即在with tf.Session():块中,或见下文)。通常[B],如果不在会话中运行一些代码,就无法打印张量的值。

如果您正在试验编程模型,并且想要一种简单的方法来评估张量,那么tf.InteractiveSession您可以在程序开始时打开一个会话,然后将该会话用于所有Tensor.eval()(and
Operation.run()) 调用。这在交互式环境中会更容易,例如 shell 或 IPython
笔记本,因为Session到处传递对象很乏味。例如,以下在 Jupyter 笔记本中有效:

with tf.Session() as sess:  print(product.eval())

对于这么小的表达式,这可能看起来很傻,但是 Tensorflow 1.x 中的一个关键思想是 延迟执行
:构建一个大而复杂的表达式非常便宜,当你想要评估它时,后端(到与 a 连接的Session) 能够更有效地安排其执行(例如,并行执行独立部分并使用
GPU)。


[A]:要打印张量的值而不将其返回到 Python
程序,您可以使用tf.print()运算符,正如Andrzej
在另一个答案中所建议的那样
。根据官方文档:

为确保操作符运行,用户需要将生成的操作传递给tf.compat.v1.Session的 run 方法,或者通过使用 )
指定将操作作为执行操作的控制依赖项,tf.compat.v1.control_dependencies([print_op]打印到标准输出。

另请注意:

在 Jupyter 笔记本和 colabs 中,tf.print打印到笔记本单元输出。它不会写入笔记本内核的控制台日志。

[B]:如果给定张量的值是可有效计算的,您 也许
可以使用该tf.get_static_value()函数来获取给定张量的常量值。

2022-04-21