使用ImageDataGenerator生成的批处理训练的二元分类器模型,没有ImageDataGenerator不会给出相同的结果

2024-04-26 02:42:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经通过使用ImageDataGenerator将数据输入fit\ u生成器来训练我的二进制分类模型。 我没有使用任何augumentation选项,我使用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函数而不是predict生成程序尝试了相同的操作,我自己调整了图像的大小而不是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。你知道吗

我不能实时使用ImageDataGenerator。你知道吗

有什么问题吗?你知道吗

任何指示。你知道吗

我看到过一些类似于这个问题的讨论https://github.com/keras-team/keras/issues/3477#issuecomment-360022086,但是对于我的例子,我已经验证了正反两种情况,结果总是一样的,不管输入图像是什么。看起来ImageDataGenerator正在对我需要集成的数据进行一些修改。你知道吗

谢谢你, 帕塔


Tags: 图像imagetruetargetsizegetbatchbatches
1条回答
网友
1楼 · 发布于 2024-04-26 02:42:51

问题解决了。你知道吗

问题是颜色格式。你知道吗

ImageDataGenerator以RGB格式输出,而opencv imread以BGR格式读取。你知道吗

因此采用BGR2RGB变换来解决这一问题。你知道吗

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

另外,ImageDataGenerator中的默认图像大小调整器是“Nearest”,我在opencv resize中也使用了相同的设置。你知道吗

相关问题 更多 >