#python #tf.keras #image-preprocessing
#python #tf.keras #предварительная обработка изображений
Вопрос:
У меня есть папка, которая называется «train», которая разделена на 8 подпапок, каждая из которых содержит данные (изображения) одного класса (и, следовательно, мой набор данных является многоклассовым с 8 классами).). Теперь у меня есть следующие вопросы :
- Мне нужно выполнить функциональную стандартизацию, и поэтому мне нужно использовать
datagen.fit( xtrain )
, и я не знаю, как создать x _train со всеми моими данными, которые разделены в разных папках, поскольку я раньше не работал с изображениями с помощью python. Обратите внимание, что у меня достаточно памяти для одновременного хранения всех данных. - Поскольку у меня 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
Пожалуйста, обратитесь к этой ссылке для получения дополнительной информации.