如何查看张量对象中的值?我们如何看到张量对象内部发生了什么?

时间:2019-06-16 19:16:37

标签: tensorflow conv-neural-network

为什么我在tensorflow对象中看不到值?我不知道对象中正在使用什么值以及如何查看它们。看到对象中的值将解决我的问题。我发现tensorflow困难,因为您看不到对象内部发生了什么。

我已经尝试过tf.Print(),但是它不起作用

如何查看“ predict_op”值?我不知道里面有什么。看到这些值对我来说真的很重要。

        predict_op = tf.argmax(Z3, 1) #Will return max value column index.
        correct_prediction = tf.equal(predict_op, tf.argmax(Y, 1))
        # Calculate accuracy on the test set
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
        train_accuracy = accuracy.eval({X: X_train, Y: Y_train})
        test_accuracy = accuracy.eval({X: X_test, Y: Y_test})
        print("Train Accuracy:", train_accuracy)
        print("Test Accuracy:", test_accuracy)

如果我在下面的代码下运行,它也会报错,因为我不知道“ tf.argmax(Y,1)”给了我什么。

 con = tf.confusion_matrix(labels=tf.argmax(Y, 1), 
        predictions=tf.argmax(Z3, 1))
        sess = tf.Session()
        with sess.as_default():
             print(sess.run(con))

2 个答案:

答案 0 :(得分:1)

您可能需要阅读Introduction to TensorFlow文章,以了解TensorFlow的工作方式。但这是一个简短的摘要。

按运行方式定义然后定义运行方式

TensorFlow程序执行起来不像普通的python脚本。 python脚本是按运行方式定义程序,这意味着定义后的任何内容都可以更改/查看值。但是TensorFlow程序是 define-then-run 。 TensorFlow首先构建一个计算图,然后使用Session对象执行部分/整个图。在上面的链接中有更多信息。

解决您的代码问题

如果要查看predict_op的值,则需要输入计算该特定张量所需的输入/占位符。例如说(我不知道您如何计算Z3,所以我假设是一个简单的计算),

X1 = tf.placeholder(…) X2 = tf.placeholder(…) Z3 = X1 + X2 predict_op = tf.argmax(Z3, 1)

然后,您需要执行以下操作以获取predict_op的值,

sess.run(predict_op, feed_dict={X1:<value>, X2:<value>})

答案 1 :(得分:0)

在张量流中,张量大致上是具有某种形状的东西,在某些情况下是数字表示 。即,变量是张量,并且tf.matmul产生张量,而tf.placeholder是张量。它们都具有形状,但是当涉及到“张量问题的值是什么?”时,它们的行为截然不同。

变量一旦初始化总是有一个值-这是我们大家都熟悉的。像tf.matmul这样的张量是一个运算。操作仅描述应使用其输入做什么。只有提供输入(或输入的输入,如果op依赖于另一个op),操作才有价值。它们就像函数一样,描述要做什么,但是如果不提供输入,您将永远说不清输出是什么。占位符虽然仍然是张量,但根本没有值。

也就是说,例如,如果您想调试行tf.matmul(a, b),则必须继续运行下一个代码:

a_mul_b_op = tf.matmul(a, b)
a, b, a_mul_b = sess.run([a, b, a_mul_b_op], {x: input_x, y: input_y, etc: etc})
print(a, b, a_mul_b)

如果您想读取变量的值(与操作张量不同,变量在sess.run调用之间保留在内存中),可以采用以下两种等效方法之一:

print(var_conv42.eval())
print(sess.run([var_conv42]))