如何在使用 ImageDataGenerator 时获得基本事实和相应的分数
Posted
技术标签:
【中文标题】如何在使用 ImageDataGenerator 时获得基本事实和相应的分数【英文标题】:How to get the ground truths and the corresponding scores while using ImageDataGenerator 【发布时间】:2019-09-14 21:35:09 【问题描述】:我是 Keras 的新手,我使用 roc 曲线和我的测试数据集来评估我的模型的质量(该模型是使用功能 api 完成的,在我的代码 sn-中被标识为“model
” p)。
我打算使用 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()
【问题讨论】:
【参考方案1】:获取您正在使用的标签值test_generator.classes
。它提供了用于测试的所有标签。有关更多信息,您可以查看此code。它显示了一个使用 keras 数据flow_from_directory
进行混淆矩阵评估的示例。现在您可以使用test_generator.classes
中的y_pred_keras
和y_pred_true
来创建ROC 曲线。
【讨论】:
我试过你的链接,我收到一个错误expected activation_5 to have shape (5,) but got array with shape (2,)
。当我通过修改模型来修复它时,会出现另一个错误:(第 77 行)ValueError: Found input variables with inconsistent numbers of samples: [10, 190]
。 test_generator.classes
也是一个 int,所以我不能做类似的事情:``` fpr_keras, tpr_keras, thresholds_keras = roc_curve(test_generator.classes, y_pred) ```
您找到创建曲线的解决方案了吗!?谢谢。以上是关于如何在使用 ImageDataGenerator 时获得基本事实和相应的分数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用批处理为大型数据集拟合 Keras ImageDataGenerator
在机器学习中,改组如何与 ImageDataGenerator 一起工作?
使用 ImageDataGenerator 进行 Keras 数据增强(您的输入没有数据)
如何从大型 .h5 数据集中批量读取数据,使用 ImageDataGenerator 和 model.fit 进行预处理,所有这些都不会耗尽内存?
ImageDataGenerator:如何将第 4 维添加到 numpy 数组?
给定从图像名称到类标签的映射,如何使用keras ImageDataGenerator flow_from_directory?