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