首页 > 解决方案 > datagen.flow_from_directory 函数

问题描述

我正在使用 fer2013 数据集,当我使用 datagen.flow_from_directory 函数时,它找不到目录中的所有图像。

这是我的代码

IMAGE_SIZE = 224
BATCH_SIZE = 64

train_data_dir = "/content/drive/My Drive/Colab/FER2013/Training"
validation_data_dir = "/content/drive/My Drive/Colab/FER2013/PublicTest"


datagen = tf.keras.preprocessing.image.ImageDataGenerator(
    rescale=1./255, 
    validation_split=0.2)

train_generator = datagen.flow_from_directory(
    train_data_dir,
    target_size=(IMAGE_SIZE, IMAGE_SIZE),
    batch_size=BATCH_SIZE, 
    subset='training')

val_generator = datagen.flow_from_directory(
    validation_data_dir,
    target_size=(IMAGE_SIZE, IMAGE_SIZE),
    batch_size=BATCH_SIZE, 
    subset='validation')

这是结果。


Found 22921 images belonging to 7 classes.
Found 714 images belonging to 7 classes.

我本身没有错误,但在目录文件夹中我有 28000 多张图像,而在 PublicTest 3000 多张照片中,为什么它发现我的实际图像数量只有 22921 和 714?

标签: pythontensorflowimage-processingkeras

解决方案


显然,您有一个单独的训练目录和一个单独的验证图像目录。每个应该有 7 个子目录,每个类一个,并且在训练和验证目录中命名相同。在数据生成器中设置validation_split=0.2。这将获取您的训练图像并将其中的 80% 用于训练,20% 用于验证。所以大约 28000 X .8 = 22400。既然你已经有一个单独的验证目录,你应该设置 split=0。这样,训练目录中的所有图像都将用于训练。使用 validation_split=0 您不需要在 flow_from_directory 方法中指定子集。将 train_generator 和 val_generator 都输入到 model.fit 中。


推荐阅读