我一直在使用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]
使用https://www.tensorflow.org/api_docs/python/tf/print中提供的提示,我使用log_d函数打印格式化的字符串。
import tensorflow as tf
def log_d(fmt, *args):
op = tf.py_func(func=lambda fmt_, *args_: print(fmt%(*args_,)),
inp=[fmt]+[*args], Tout=[])
return tf.control_dependencies([op])
# actual code starts now...
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)
with log_d('MAT1: %s, MAT2: %s', matrix1, matrix2): # this will print the log line
product = tf.matmul(matrix1, matrix2)
with tf.Session() as sess:
sess.run(product)
Tf.keras.backend.eval用于计算小表达式。
tf.keras.backend.eval(op)
TF - 1。x和TF 2.0兼容。
最小可验证示例
from tensorflow.keras.backend import eval
m1 = tf.constant([[3., 3.]])
m2 = tf.constant([[2.],[2.]])
eval(tf.matmul(m1, m2))
# array([[12.]], dtype=float32)
这很有用,因为您不必显式地创建Session或InteractiveSession。