我一直在使用TensorFlow中矩阵乘法的介绍性示例。
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)
当我打印乘积时,它显示为一个张量对象:
<tensorflow.python.framework.ops.Tensor object at 0x10470fcd0>
但是我怎么知道产品的价值呢?
下面的方法不起作用:
print product
Tensor("MatMul:0", shape=TensorShape([Dimension(1), Dimension(1)]), dtype=float32)
我知道图在会话上运行,但是没有任何方法可以检查张量对象的输出而不在会话中运行图吗?
虽然其他答案是正确的,即在对图求值之前不能打印值,但它们并没有谈到一种简单的方法,即一旦对图求值,就可以在图中实际打印值。
当图被求值(使用run或eval)时,查看张量值的最简单方法是使用Print操作,如下例所示:
# Initialize session
import tensorflow as tf
sess = tf.InteractiveSession()
# Some tensor we want to print the value of
a = tf.constant([1.0, 3.0])
# Add print operation
a = tf.Print(a, [a], message="This is a: ")
# Add more elements of the graph using a
b = tf.add(a, a)
现在,当我们计算整个图时,例如使用b.c eval(),我们得到:
I tensorflow/core/kernels/logging_ops.cc:79] This is a: [1 3]
虽然其他答案是正确的,即在对图求值之前不能打印值,但它们并没有谈到一种简单的方法,即一旦对图求值,就可以在图中实际打印值。
当图被求值(使用run或eval)时,查看张量值的最简单方法是使用Print操作,如下例所示:
# Initialize session
import tensorflow as tf
sess = tf.InteractiveSession()
# Some tensor we want to print the value of
a = tf.constant([1.0, 3.0])
# Add print operation
a = tf.Print(a, [a], message="This is a: ")
# Add more elements of the graph using a
b = tf.add(a, a)
现在,当我们计算整个图时,例如使用b.c eval(),我们得到:
I tensorflow/core/kernels/logging_ops.cc:79] This is a: [1 3]
基本上,在tensorflow中,当你创建任何类型的张量时,它们都会被创建并存储在里面,只有当你运行tensorflow会话时才能访问。假设你已经创建了一个常数张量
c = tf.constant ([(1.0, 2.0, 3.0), (4.0, 5.0, 6.0)))
不运行会话,您可以得到
—op:操作。计算这个张量的运算。
—value_index: int类型。生成这个张量的操作端点的索引。
—dtype: dtype类型。存储在这个张量中的元素类型。
为了得到这些值,你可以用你需要的张量运行一个会话:
with tf.Session() as sess:
print(sess.run(c))
sess.close()
输出将是这样的:
array([[1st, 2nd, 3rd],
[4th, 5th, 6th]], dtype=float32)
特遣部队。Print现在已弃用,下面是如何使用tf。而是打印(小写p)。
虽然运行会话是一个很好的选择,但它并不总是正确的方法。例如,你可能想在一个特定的会话中打印一些张量。
新的print方法返回一个没有输出张量的打印操作:
print_op = tf.print(tensor_to_print)
由于它没有输出,所以不能像使用tf.Print那样将它插入图中。相反,您可以将它添加到会话中的控制依赖项中,以便打印它。
sess = tf.compat.v1.Session()
with sess.as_default():
tensor_to_print = tf.range(10)
print_op = tf.print(tensor_to_print)
with tf.control_dependencies([print_op]):
tripled_tensor = tensor_to_print * 3
sess.run(tripled_tensor)
有时,在较大的图(可能部分是在子函数中创建的)中,将print_op传播到会话调用是很麻烦的。然后,特遣部队。Tuple可用于将打印操作与另一个操作耦合,然后无论哪个会话执行该代码,该操作都将与该操作一起运行。以下是如何做到的:
print_op = tf.print(tensor_to_print)
some_tensor_list = tf.tuple([some_tensor], control_inputs=[print_op])
# Use some_tensor_list[0] instead of any_tensor below.