функция datagen.flow_from_directory

#python #tensorflow #image-processing #keras

#python #тензорный поток #обработка изображений #keras

Вопрос:

Я использую набор данных 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.

  

У меня нет ошибки как таковой, но в папке directory у меня более 28000 изображений, а в PublicTest 3000 итак, почему он находит мне только 22921 и 714 вместо моего фактического количества изображений?

Комментарии:

1. Я бы рекомендовал вам просмотреть эту страницу. Попытайтесь понять, как этот метод считывает изображения и устанавливает для них разные классы. Прочитайте с самого начала, чтобы понять структуру каталогов. keras.io/api/preprocessing/image/#flowfromdirectory-method

2. Спасибо за ваше предложение.

Ответ №1:

По-видимому, у вас есть отдельный каталог для обучения и отдельный каталог для изображений проверки. У каждого должно быть 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.

Комментарии:

1. Спасибо. Теперь все работает нормально. Я новичок в этом, и ваше объяснение очень помогло мне понять такие базовые знания.

2. приветствую, мы все начинаем с замешательства, но со временем вы станете экспертом