如何调用测试数据集上的Keras flow_from_directory()方法?

kmpatx3s  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(239)

following article中,有一个说明,即数据集需要分为培训、确认和测试文件夹,其中测试文件夹不应包含带标签的子文件夹。相反,它应只包含一个文件夹(即Test_folder)。
当我使用下面的代码时,我得到了一条输出消息,指出没有找到图像。

Ver.1:
test_generator = test_datagen.flow_from_directory(
    "dataset\\test\\test_folder\\",
    target_size=(IMG_WIDTH, IMG_HEIGHT),
    batch_size=1,
    class_mode=None,
    shuffle=False,
    seed=10)

Output message: "Found 0 images belonging to 0 classes.".

相反,如果我使用与train和validation文件夹中相同的文件夹结构(dataset\test\class_a\test_1.jpg等),那么一切似乎都正常,我可以评估我的模型。

Ver.2:
test_generator = test_datagen.flow_from_directory(
    "dataset\\test\\",
    target_size=(IMG_WIDTH, IMG_HEIGHT),
    batch_size=32,
    class_mode='categorical',
    shuffle=False,
    seed=10)

Output message: "Found 1500 images belonging to 3 classes.".

我还尝试了recommendation,其中指定了“classes”属性,但仍然没有找到图像。

Ver.3:
test_generator = test_datagen.flow_from_directory(
    "dataset2\\test\\test_folder\\",
    target_size=(IMG_WIDTH, IMG_HEIGHT),
    batch_size=1,
    classes=['test'],
    class_mode=None,
    shuffle=False,
    seed=10)

Output message: Found 0 images belonging to 1 classes.

因此,调用flow_from_directory()方法的正确方法是什么?为什么我会收到找不到文件的消息?当我使用Ver.2解决方案时,我的模型是否没有正确求值?

isr3a4wc

isr3a4wc1#

如果为None,则不会返回任何标签(生成器将只生成成批的图像数据,这对于与model.predict_generator()一起使用非常有用)。请注意,如果class_mode为None,则数据仍需要驻留在directory的子目录中才能正常工作。
请注意,评估需要使用标签来确定模型的好坏。通常,只有在生产或真实的测试中才不使用标签。您似乎希望测试模型,因此实际上需要使用标签。这意味着您应该对测试数据进行排序

train/
    label1/
        ...
        ...
    label2/
        ...
        ...
val/
    label1/
        ...
        ...
    label2/
        ...
        ...
test/
    label1/
        ...
        ...
    label2/

当你想学习如何使用一个框架时,阅读文档通常比那些文章更有帮助。https://keras.io/preprocessing/image/#flow_from_directory。
另一方面,mc.ai是一个充斥着撕裂媒体文章的网站,应该避免。许多文章是不完整的+它侵犯了作者的版权。

b0zn9rqh

b0zn9rqh2#

如果你不想改变测试目录的结构,可以试试

test_data_gen = test_image_generator.flow_from_directory(test_dir,
        target_size=(IMG_HEIGHT, IMG_WIDTH),
        batch_size= batch_size ,shuffle=False,
        class_mode= 'binary',classes=['.'])

需要指定classes=['.'],因为flow_from_directory方法将搜索文件夹。
在您的Ver.3:中,您指定了类,但目录中没有包含test的文件夹,因此您得到了0个图像和1个类。

dl5txlt9

dl5txlt93#

另一个解决方案是将test目录的父文件夹设置为flow from directory函数的目录,并将classes属性设置为包含图像的test文件夹的名称(在本例中为“test”)

datagen = ImageDataGenerator()
# In ./dataset directory, there is `test` directory.
test_data = datagen.flow_from_directory('./dataset', classes=['test'])

参考资料如下:https://velog.io/@jhcho/Loading-Unlabeled-Images-with-ImageDataGenerator-flowfromdirectory-in-Keras

相关问题