Стандартизация данных с использованием ImageDataGenerator

#python #tf.keras #image-preprocessing

#python #tf.keras #предварительная обработка изображений

Вопрос:

У меня есть папка, которая называется «train», которая разделена на 8 подпапок, каждая из которых содержит данные (изображения) одного класса (и, следовательно, мой набор данных является многоклассовым с 8 классами).). Теперь у меня есть следующие вопросы :

  1. Мне нужно выполнить функциональную стандартизацию, и поэтому мне нужно использовать datagen.fit( xtrain ) , и я не знаю, как создать x _train со всеми моими данными, которые разделены в разных папках, поскольку я раньше не работал с изображениями с помощью python. Обратите внимание, что у меня достаточно памяти для одновременного хранения всех данных.
  2. Поскольку у меня 8 классов, статистика рассчитывается для каждого класса отдельно, если да, то как я могу это сделать, используя .fit(x_train) ?

Ответ №1:

Пожалуйста, следуйте приведенным ниже примерам фрагментов кода, чтобы разрешить ваш запрос.(Я использовал 20 наборов данных изображений из двух классов)

 import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator

PATH ="/train/"   #path to your train directory which contains 8 subfolders

train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
train_generator = train_datagen.flow_from_directory(PATH, target_size=(50, 50), batch_size=5, class_mode='binary')  #class_mode='categorical'
 

Вывод:

 Found 20 images belonging to 2 classes.
 

После определения и компиляции модели подгоните этот набор данных к модели.

 num_classes = 2   # you can define num_classes = 8

model = tf.keras.Sequential([
  tf.keras.layers.Rescaling(1./255),
  tf.keras.layers.Conv2D(32, 3, activation='relu'),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Conv2D(32, 3, activation='relu'),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Conv2D(32, 3, activation='relu'),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dense(num_classes)
])

model.compile(optimizer='adam',loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])

model.fit(train_generator,steps_per_epoch=2,epochs=5)  # you can define steps_per_epoch=(number of images/batch_size),epochs
 

Пожалуйста, обратитесь к этой ссылке для получения дополнительной информации.