У меня есть база данных, которая включает 2700 обучающих образцов и 300 тестовых образцов, всего 3000. Я использую ImageDataGenerator
для увеличения изображений во время обучения. Я хочу использовать несколько дополненных изображений для каждого входного изображения. Допустим, у меня есть функция preprocess(image)
, которая берет одно изображение и возвращает список из 10 изображений после нескольких этапов предварительной обработки. Я хочу ввести все эти 10 изображений, чтобы у меня было 27000 обучающих образцов (позже я сделаю это и для тестовых образцов).
Я мог бы заранее использовать эту функцию preprocess
для обучения, чтобы увеличить изображения и сохранить они будут записаны на диск для последующего использования, но это будет истощать ресурсы, плюс у моей функции есть некоторая встроенная случайность, и поэтому я ожидаю разные изображения для каждой эпохи обучения. Мне нужен способ добиться этого на лету. Я также хочу видеть точность как обучения, так и проверки при подгонке. Вот как выглядит мой код:
import numpy as np
from keras.models import load_model
BATCH_SIZE = 32
NB_EPOCH = 50
data = np.load('data.npy')
labels = np.load('labels.npy')
X_train = data [:2700]
X_valid = data [2701:]
y_train = labels [:2700]
y_valid = labels [2701:]
def preprocess(image):
#do some stuff
return listofimages
model = load_model('savedmodel')
#do nothing on this datagen just use it to pass my array to fit function
#or we can even use no datagens at all
train_datagen = ImageDataGenerator()
valid_datagen = ImageDataGenerator()
model.fit(train_datagen.flow(X_train,y_train, batch_size=BATCH_SIZE),
steps_per_epoch = np.ceil(len(X_train)/BATCH_SIZE),
validation_data = valid_datagen.flow(
X_valid,y_valid, batch_size= BATCH_SIZE),
validation_steps = np.ceil(len(X_valid)/BATCH_SIZE),
epochs = NB_EPOCH, verbose=1)