Keras:从ImageDataGenerator或predict\u generator获取真实标签(y_测试)

Keras:从ImageDataGenerator或predict\u generator获取真实标签(y_测试),keras,Keras,我正在使用ImageDataGenerator().flow\u from\u directory(…)从目录生成批量数据 在模型成功构建之后,我希望得到一个两列的真类标签和预测类标签数组。使用model.predict\u生成器(validation\u generator,steps=NUM\u steps)我可以得到一个预测类的numpy数组。是否可以让predict\u生成器输出相应的真实类标签 要添加:validation\u generator.classes确实打印真实标签,但按照

我正在使用
ImageDataGenerator().flow\u from\u directory(…)
从目录生成批量数据

在模型成功构建之后,我希望得到一个两列的真类标签和预测类标签数组。使用
model.predict\u生成器(validation\u generator,steps=NUM\u steps)
我可以得到一个预测类的numpy数组。是否可以让
predict\u生成器
输出相应的真实类标签


要添加:validation\u generator.classes确实打印真实标签,但按照从目录中检索标签的顺序,它不考虑通过增广进行的批处理或样本扩展。

您可以通过以下方式获得预测标签:

 y_pred = numpy.rint(predictions)
您可以通过以下方式获得真正的标签:

y_true = validation_generator.classes
在此之前,应在验证生成器中设置
shuffle=False

最后,您可以通过以下方式打印混淆矩阵:

打印混淆矩阵(y\u-true,y\u-pred)

还有另一种稍微“黑客化”的方法,可以检索真实的标签。请注意,当在生成器中设置
shuffle=True
时,这种方法可以处理(一般来说,洗牌数据是一个好主意-如果您在存储数据的地方手动执行,或者通过生成器执行,这可能更容易)。不过,对于这种方法,您需要您的模型

# Create lists for storing the predictions and labels
predictions = []
labels = []

# Get the total number of labels in generator 
# (i.e. the length of the dataset where the generator generates batches from)
n = len(generator.labels)

# Loop over the generator
for data, label in generator:
    # Make predictions on data using the model. Store the results.
    predictions.extend(model.predict(data).flatten())

    # Store corresponding labels
    labels.extend(label)

    # We have to break out from the generator when we've processed 
    # the entire once (otherwise we would end up with duplicates). 
    if (len(label) < generator.batch_size) and (len(predictions) == n):
        break
#创建用于存储预测和标签的列表
预测=[]
标签=[]
#获取生成器中标签的总数
#(即生成器从中生成批次的数据集的长度)
n=长度(发电机标签)
#发电机上的回路
对于数据,请在生成器中添加标签:
#使用模型对数据进行预测。存储结果。
expections.extend(model.predict(data.flatte())
#存储相应的标签
标签。扩展(标签)
#处理完后,我们必须从发电机里跳出来
#整个过程只有一次(否则我们最终会得到重复的结果)。
如果(len(标签)<发生器批次尺寸)和(len(预测)=n):
打破
您的预测和相应的标签现在应该分别存储在
预测
标签


最后,请记住,我们不应该在验证集和测试集/生成器上添加数据增强。

@Kasra,您能提供有关问题的详细信息吗?请注意,我们不应该在验证集和测试集/生成器上添加数据增强。