keras 为什么flow_from_directory和image_dataset_from_directory返回完全不同的验证结果?

bvuwiixz  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(175)

我正在训练一个mobilenet,评估指标一直很低,所以我尝试了不同的加载数据集的方法,所以我尝试了两种方法
下面是我使用的代码:

train_datagen=ImageDataGenerator(rescale=1./255,
                                 horizontal_flip=False)
test_datagen = ImageDataGenerator(rescale=1./255)

train_generator=train_datagen.flow_from_directory(
    '/home/kun/knee/train/', 
    target_size=(128,128),
    color_mode='rgb',
    batch_size=16 ,
    class_mode='categorical')

test_generator = test_datagen.flow_from_directory(
    '/home/kun/knee/test/',
    target_size=(128,128),
    color_mode='rgb',
    batch_size=16,
    class_mode='categorical',
    shuffle=False)

当我使用ImageDataGenerator时,事情进展顺利,只是精度较低,即使验证精度较高,每个时期也需要270秒(大数据集4000+图像)
然后我试了这个:

train_ds = image_dataset_from_directory(
    directory='/home/kun/knee/train/',
    labels='inferred',
    label_mode='categorical',
    batch_size=16,
    image_size=(128, 128))
validation_ds = image_dataset_from_directory(
    directory='/home/kun/knee/test/',
    labels='inferred',
    label_mode='categorical',
    batch_size=16,
    image_size=(128, 128))

每个纪元的时间只有大约80秒。但这次混淆矩阵出来了,它看起来像这样:cm
所有的测试图像预测为1类(对不起,我不知道如何使图像直接出现在这篇文章请点击)
有谁能解释一下吗?如果可能的话,我真的很想使用image_dataset_from_directory,因为它可以加快这个过程
谢谢

vngu2lb8

vngu2lb81#

好吧,我想我找到了一个答案后,通过一切我可以找到网上拖钓。
基本上,如果我想使用image_dataset_from_directory,我需要在训练之前重新缩放(预处理)图像。
我所做的是在我的模型上添加一个额外的缩放层。
我仍然不确定这两种方法是否真的返回了输入模型的不同类型的数据,这可能会在预测阶段造成混乱,但我可以肯定这个问题与学习率,批量大小和数据集 Shuffle 无关。
也许这将有助于保存一些时间,为其他人有同样的问题,我是。

相关问题