为keras预测获取真实标签

时间:2019-11-12 06:03:25

标签: python tensorflow keras conv-neural-network

我有一个用于图像分类的标准CNN,使用以下生成器来获取数据集:

generator = validation_image_generator.flow_from_directory(batch_size=BATCH_SIZE,
                                                           directory=val_dir,
                                                           shuffle=False,
                                                           target_size=(100,100),
                                                           class_mode='categorical')

我可以轻松地通过以下方式获得预测标签:

predictions = model.predict(dataset)

现在,我想获取所有预测的(原始)真实标签图像,以与预测相同的顺序进行比较。我确信信息可以很容易地存储在某个地方,但是我找不到它。

2 个答案:

答案 0 :(得分:1)

您必须从数据生成器获取图像并将其提供给model.predict。 如果image_gen是您的ImageDataGenerator,那么您可以使用:

X,y = image_gen.next()
prediction = model.predict(X)

现在X是您的图像(例如,批处理X [0]是第一个图像,X [1]是第二个图像,依此类推),y是它们的相应标签,而预测是您为每个图像输出的模型。 / p>

这将从ImageDataGenerator提供一批,并显示X,y和预测。要在整个时期内运行它,必须使用for循环:

for step in range(step_per_epoch):
    X, y = image_gen.next()
    prediction = model.predict(X)

其中step_per_epoch应该为dataset_size / batch_size。

,但请记住ImageDataGenerators是随机工作的。因此,如果您有100张图像且批处理大小为10,则如果从ImageDataGenerator提取10个批次,则可能会看到两次图像,而不会看到其他图像。

答案 1 :(得分:0)

您想一次获得真实的标签,图像和预测。可以类似于documentation中的示例进行此操作:

# here's a more "manual" example
for e in range(epochs):
    print('Epoch', e)
    batches = 0
    for x_batch, y_batch in datagen.flow(x_train, y_train, batch_size=32):
        model.fit(x_batch, y_batch)
        batches += 1
        if batches >= len(x_train) / 32:
            # we need to break the loop by hand because
            # the generator loops indefinitely
            break

以上是一个训练循环,您可以对其进行调整以轻松获得测试评估循环,例如:

for x_val, y_val in generator().flow_from_directoy(...):
    y_pred = model.predict(x_val)
    score = your_score_func(y_pred,y_val)