2017-07-03 58 views
1

我用TensorFlow训练卷积神经网络(CNN)。当训练结束后我计算用下面的代码的准确性:如何在TensorFlow中的eval MNIST测试数据期间从每个输出节点获取值?

... 
correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) 
accuracy = tf.reduce_mean(tf.cast(correct, tf.float32)) 
eval_batch_size = 1 
good = 0 
total = 0 
for i in range(int(mnist.test.num_examples/eval_batch_size)): 
    testSet = mnist.test.next_batch(eval_batch_size, shuffle=False) 
    good += accuracy.eval(feed_dict={ x: testSet[0], y: testSet[1]}) 
    total += testSet[0].shape[0] 
accuracy_eval = good/total 

对于“好”,我得到了价值1.0当测试图像是正确的检测值0.0,如果没有。

我想要得到所有十个输出节点的值。例如,我使用手写的“8”评估测试图像,因此数字“8”的输出节点可能为0.6,数字“3”为0.3,“5”为0.05,最后的0.05扩展超出其他七个输出节点。

那么如何在TensorFlow中为每个测试图像获得所有这十个值?

回答

1

你可以通过添加以下行:

右后
pred=prediction.eval(feed_dict={ x: testSet[0], y: testSet[1]}) 

testSet = mnist.test.next_batch(eval_batch_size, shuffle=False) 

然后pred将是包含1个概率向量的阵列,这是你有兴趣的矢量in。

+0

谢谢@MiriamFarbe!这正是我所期待的。我对这个概率向量中的值有点困惑,我期望的数值在0.0到1.0之间。但是,例如,我得到这个:“-45049.1328125 6181.90087891 -26765.70117188 -40108.9609375 44725.2578125 60644.22265625 72028.3515625 -38615.09375 23696.48046875 -9353.94628906”。你有一些关键字或链接,我可以查看了解这一点? – Freundlicher

+1

@Freundlicher听起来你没有在你的输出中应用softmax(https://en.wikipedia.org/wiki/Softmax_function)。 softmax函数将矢量转换为概率矢量。通过softmax的定义,argmax(预测,1)和argmax(softmax(预测),1)将是相等的。然而,后者更容易解释,并且经常用于评估损失函数。 –

+0

@Fundundlicher除了我以前的评论,你可以在这里看到softmax在模型中被内部应用:https://www.tensorflow.org/get_started/mnist/pros#predicted_class_and_loss_function,而在这里https://www.tensorflow .org/get_started/mnist/beginners#implements_the_regression它被明确应用(在行y = ...) –