我正在使用ImageDataGenerator().flow_from_directory(...)
从目录生成批数据。
在模型成功构建之后,我希望得到一个包含True和Predicted类标签的两列数组。使用model.predict_generator(validation_generator, steps=NUM_STEPS)
,我可以得到一个包含预测类的numpy数组。是否可以让predict_generator
输出相应的True类标签?
要添加的是:validation_generator.classes确实打印True标签,但是按照从目录中检索它们的顺序,它没有考虑批处理或通过增强进行的样本扩展。
4条答案
按热度按时间du7egjpx1#
您可以通过以下方式获取预测标签:
你可以通过以下方式得到真正的标签:
在此之前,您应该在验证生成器中设置
shuffle=False
。最后,您可以通过以下方式打印混淆矩阵
print confusion_matrix(y_true, y_pred)
jv4diomz2#
还有另一种稍微“黑客”一点的方法来检索真正的标签。请注意,这种方法可以处理在生成器中设置
shuffle=True
的情况(一般来说,打乱数据是一个好主意-无论是在存储数据的地方手动进行,还是通过生成器进行,这可能更容易)。您的预测和相应的标签现在应该分别存储在
predictions
和labels
中。最后,请记住,我们不应该在验证和测试集/生成器上添加数据扩充。
noj0wjuj3#
使用
np.rint()
方法会得到一个像[1.,0.,0.]这样的热编码结果,当我尝试用confusion_matrix(y_true, y_pred)
创建一个混淆矩阵时,它导致了错误。因为validation_generator.classes
返回的类标签是一个数字。为了获取类编号,例如0,1,2作为指定的类标签,我发现本主题中的选择答案很有用。here
uyto3xhc4#
您应该尝试使用此方法来解析类概率,并根据得分将其转换为单个类。