我正在尝试从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"]()]]


这是为什么?如何找到混淆矩阵?

谢谢。

最佳答案

说明

张量流计算图需要计算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的机器前。这就是为什么我自己无法验证的原因。变量名称等可能存在一些错误。

关于python - tf.confusion_matrix和InvalidArgumentError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49835838/

10-12 23:54