为什么我在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))
答案 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]))