tf.confusion_matrix和InvalidArgumentError

时间:2018-04-14 20:22:20

标签: python tensorflow confusion-matrix

我试图从here运行train.py。它基于this tutorial。我想找到混淆矩阵,并在train.py的最后一行之后添加:

confusionMatrix = tf.confusion_matrix(labels=y_true_cls,predictions=y_pred_cls)

with session.as_default():
    print confusionMatrix.eval()

但我收到以下错误:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'x' with dtype float and shape [?,128,128,3]
     [[Node: x = Placeholder[dtype=DT_FLOAT, shape=[?,128,128,3], _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

为什么?我怎样才能找到混淆矩阵?

感谢。

2 个答案:

答案 0 :(得分:1)

说明

张量流计算图需要计算y_true_clsy_pred_cls的值,以便计算confusionMatrix

要计算y_true_clsy_pred_cls,代码中定义的图表需要xy_true占位符的值。运行会话时,这些值以字典的形式提供。

在为这些占位符提供值后,张量流图形具有计算最终confusionMatrix值的必要输入。

代码

我希望以下代码有所帮助。

>>> confusionMatrix = tf.confusion_matrix(labels=y_true_cls,predictions=y_pred_cls)
>>> 
>>> # fetch a chunk of data
>>> batch_size = 100
>>> x_batch, y_batch, _, cls_batch = data.valid.next_batch(batch_size)
>>> 
>>> # make a dictionary to be fed for placeholders `x` and `y_true`
>>> feed_dict_testing = {x: x_batch, y_true: y_batch}
>>> 
>>> # now evaluate by running the session by feeding placeholders
>>> result=session.run(confusionMatrix, feed_dict=feed_dict_testing)
>>> 
>>> print result

预期输出

如果分类器工作得很好,那么输出应该是对角矩阵。

                  predicted
                  red  blue
originally red  [[ 15,  0],
originally blue  [  0, 15]]


PS:现在,我不在Tensorflow的机器前面。这就是我自己无法验证的原因。变量名称等可能存在一些错误。

答案 1 :(得分:1)

错误表明您的模型需要输入x才能按照the code you reference的第39行运行:

x = tf.placeholder(tf.float32, shape=[None, img_size,img_size,num_channels], name='x')

基本上,如果你不提供输入,它就无法计算预测值,更不用说混淆矩阵了!您还需要在同一位置按照第42行y_true的值:

y_true = tf.placeholder(tf.float32, shape=[None, num_classes], name='y_true')

所以这样做:

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer()) 
    print( sess.run( confusionMatrix ,
           feed_dict = { x : [some value],
                         y_true: [ some other value ] } ) )

[某些值]和[其他一些值]你应该拥有,或者如果没有,只需生成一些随机值进行测试。