使用ImageDataGenerator生成的批处理训练的二进制分类器模型在没有ImageDataGenerator的情况下不会给出相同的结果

时间:2019-10-12 12:31:02

标签: python tensorflow machine-learning keras

我已经通过使用ImageDataGenerator将数据提供给fit_generator来训练我的二进制分类模型。 我没有使用任何扩展选项,只是使用ImageDataGenerator将图像调整为224x224x3。 下面是我的训练代码。

def get_batches(directory, target_size=target_size, batch_size=batch_size, shuffle=False):
    datagen = ImageDataGenerator()
    return datagen.flow_from_directory(directory=directory,
                                          target_size=target_size,
                                          batch_size=batch_size,
                                          class_mode='categorical',
                                          shuffle=shuffle)


batches = get_batches(train_dataset, shuffle=True)
valid_batches = get_batches(validation_dataset, shuffle=True)

model.fit_generator(batches, steps_per_epoch=batches.samples//batch_size, nb_epoch=150,
                    validation_data=valid_batches,
                    callbacks= [early_stop, checkpoint, tensorboard, time_callback, TerminateOnNaN()],
                    validation_steps=valid_batches.samples//batch_size)

我得到了不错的培训结果,并且用测试集进行了评估培训。

batches = get_batches(evaluation_dataset, shuffle=True)

pred_acc = top_model.predict_generator(batches, steps=batches.samples//batch_size)

我得到了预期的评估准确性。

我尝试了使用预测函数(而不是predict_generator)进行相同的操作,并自行调整了图像的大小,而不是ImageDataGenerator。

image = cv2.imread ("xyz.bmp")
image_resized = cv2.resize(image, (224,224))

pred_img = np.expand_dims(image_resized, axis=0)

prediction = top_model.predict(pred_img)

当我使用ImageDataGenerator对提供给predict_generator的相同图像进行预测时,没有得到相同的模型输出。

我不能使用ImageDataGenerator进行实时使用。

可能是什么问题?

任何指针。

我已经看到了一些类似于此问题https://github.com/keras-team/keras/issues/3477#issuecomment-360022086的讨论,但是对于我的情况,我已经验证了肯定和否定情况,并且无论输入图像如何,结果始终相同。看起来ImageDataGenerator正在对我需要集成的数据进行一些修改。

谢谢, 帕塔

1 个答案:

答案 0 :(得分:0)

解决了问题。

问题是采用彩色格式的。

ImageDataGenerator以RGB格式输出,而opencv imread则以BGR格式读取。

因此,BGR2RGB转换用于解决该问题。

image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)

ImageDataGenerator中的默认图像大小调整器也为“最近”,我在opencv调整大小中也使用了相同的大小。