我一直在使用 TensorFlow 中矩阵乘法的介绍性示例。
matrix1 = tf.constant([[3., 3.]]) matrix2 = tf.constant([[2.],[2.]]) product = tf.matmul(matrix1, matrix2)
当我打印产品时,它会将其显示为一个Tensor对象:
Tensor
<tensorflow.python.framework.ops.Tensor object at 0x10470fcd0>
但我怎么知道 的价值product?
product
以下没有帮助:
print product Tensor("MatMul:0", shape=TensorShape([Dimension(1), Dimension(1)]), dtype=float32)
我知道图形在 上运行Sessions,但是没有任何方法可以检查Tensor对象的输出而不在 a 中运行图形session吗?
Sessions
session
评估对象实际值的最简单[A]Tensor方法是将其传递给Session.run()方法,或Tensor.eval()在您有默认会话时调用(即在with tf.Session():块中,或见下文)。通常[B],如果不在会话中运行一些代码,就无法打印张量的值。
Session.run()
Tensor.eval()
with tf.Session():
如果您正在试验编程模型,并且想要一种简单的方法来评估张量,那么tf.InteractiveSession您可以在程序开始时打开一个会话,然后将该会话用于所有Tensor.eval()(and Operation.run()) 调用。这在交互式环境中会更容易,例如 shell 或 IPython 笔记本,因为Session到处传递对象很乏味。例如,以下在 Jupyter 笔记本中有效:
tf.InteractiveSession
Operation.run()
Session
with tf.Session() as sess: print(product.eval())
对于这么小的表达式,这可能看起来很傻,但是 Tensorflow 1.x 中的一个关键思想是 延迟执行 :构建一个大而复杂的表达式非常便宜,当你想要评估它时,后端(到与 a 连接的Session) 能够更有效地安排其执行(例如,并行执行独立部分并使用 GPU)。
[A]:要打印张量的值而不将其返回到 Python 程序,您可以使用tf.print()运算符,正如Andrzej 在另一个答案中所建议的那样。根据官方文档:
tf.print()
为确保操作符运行,用户需要将生成的操作传递给tf.compat.v1.Session的 run 方法,或者通过使用 ) 指定将操作作为执行操作的控制依赖项,tf.compat.v1.control_dependencies([print_op]打印到标准输出。
tf.compat.v1.Session
tf.compat.v1.control_dependencies([print_op]
另请注意:
在 Jupyter 笔记本和 colabs 中,tf.print打印到笔记本单元输出。它不会写入笔记本内核的控制台日志。
tf.print
[B]:如果给定张量的值是可有效计算的,您 也许 可以使用该tf.get_static_value()函数来获取给定张量的常量值。
tf.get_static_value()