我是Keras和I的新手,我使用roc曲线和我的测试数据集来评估模型的质量(模型是使用功能api完成的,在我的代码片段中被识别为“model
”)。
我计划使用ROC曲线(使用scikit-learn中的roc_curve)。
示例:
fpr_keras, tpr_keras, thresholds_keras = roc_curve(y_true,y_scores)
为了做到这一点,正如文档所说,我需要真正的二进制标签(示例中为y_true
)和目标分数(示例中为y_scores
)。
但我不知道如何从测试ImageDataGenerator
获取所有真正的二进制标签(test_generator
(见下文)返回DirectoryIterator)。
而且我不知道如何使用model.predict_generator
获得相应的目标分数(它返回一个批量大小的数组)
现在我的代码看起来像这样(总结):
from keras.preprocessing.image import ImageDataGenerator
from sklearn.metrics import roc_curve
height=150
width=150
batch_size=16
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
'data/test',
target_size=(height, width),
batch_size=batch_size,
class_mode='binary')
y_pred_keras = model.predict_generator(test_generator,1).ravel()
获取使用test_generator.classes
的标签值。它提供了用于测试的所有标签。有关更多信息,您可以查看此code。它显示了使用keras数据flow_from_directory
进行混淆矩阵评估的示例。现在你可以使用y_pred_keras
的y_pred_true
和test_generator.classes
来创建ROC曲线。