如何在 tensorflow mnist_softmax.py 中打印张量的值
Posted
技术标签:
【中文标题】如何在 tensorflow mnist_softmax.py 中打印张量的值【英文标题】:How to print the value of a tensor in tensorflow mnist_softmax.py 【发布时间】:2016-09-01 00:10:51 【问题描述】:我刚刚尝试在 TensorFlow 0.8 中运行 mnist_softmax.py
。
我想在模型测试步骤之前观察y
和y_
的值。
下面是代码:
print(y) # added by me
print(y_) # added by me
# Test trained model
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
完整的代码可在GitHub 获得。
下面是输出:
Tensor("Softmax:0", shape=(?, 10), dtype=float32)
Tensor("Placeholder_1:0", shape=(?, 10), dtype=float32)
我也尝试过使用sess.run(y)
和y.eval()
,但是尝试时出现这样的错误:
tensorflow.python.framework.errors.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float
[[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
Caused by op u'Placeholder', defined at: ...
【问题讨论】:
查看:***.com/questions/33610685/… 【参考方案1】:TL;DR: y
和 y_
张量都依赖于 tf.placeholder()
操作,因此它们需要您输入输入值评估了他们。您可以通过输入一批输入来在一批输入数据上打印 softmax 的输出,如下所示:
batch_xs, _ = mnist.train.next_batch(100)
print(y.eval(x: batch_xs))
MNIST 示例包含以下几行:
# Create the model
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
请注意,您尝试打印的第一个张量y
是x
的函数,它被定义为tf.placeholder()
。 tf.placeholder()
op 是一种为计算定义符号 argument 的方法:它本身没有任何值,但它表示 x
必须是具有 784
列的浮点值矩阵.
运行/评估 y
而不提供 x
的值就像编写以下 Python 函数并在没有所有参数的情况下调用它:
def y(x):
W = ...
b = ...
return softmax(matmul(x, W), b)
# This would fail with an error.
print(y())
如何为参数指定一个值?在 TensorFlow 中,您可以通过 输入 占位符的值来做到这一点(例如在 training loop 和 accuracy calculation 中):
# Get a batch of input data to feed to the computation.
batch_xs, _ = mnist.train.next_batch(100)
print(sess.run(y, feed_dict=x: batch_xs))
# or
print(y.eval(x: batch_xs))
张量y_
定义为tf.placeholder()
。出于技术原因,您无法直接评估占位符,即使您为其输入值也是如此。但是,这样做并不是特别有用!相反,您可以只打印您想要输入的值。
【讨论】:
谢谢你,先生。我被这个问题困扰了一整天。你的解释比 tensorflow.org 清楚得多。以上是关于如何在 tensorflow mnist_softmax.py 中打印张量的值的主要内容,如果未能解决你的问题,请参考以下文章