Вы можете использовать класс ImageDataGenerator
с любыми типами меток, которые вам нравятся, а также с изображениями, которые являются просто многомерными массивами.Вот пример использования фиктивных пустых изображений:
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
# Create fake images
n, width, height = 1000, 28, 28
images_data = np.random.randint(low=0, high=256, size=(n, height, width, 3))
images_labels = np.random.randint(low=0, high=256, size=(n, height, width, 3))
image_gen = ImageDataGenerator()
batch_size = 100
batch_gen = image_gen.flow(images_data, images_labels, batch_size=batch_size)
Вы можете, например, передать batch_gen
в fit_generator
, и это даст кортежи (images_data, images_labels)
, оба с формой (batch_size, height, width, 3)
.Вы можете проверить это с помощью:
batch = batch_gen.next()
print(len(batch))
print(batch[0].shape)
print(batch[1].shape)
Если ваш набор данных не помещается в памяти и хранится в виде файлов, вы также можете использовать flow_from_directory
.В официальной документации Keras есть примеров .
Вы также можете что-то сделать с партиями перед их выдачей, если напишите свою собственную функцию генератора пакетов:
def _generate_batches(image_gen, images_data, images_labels, batch_size):
for batch in image_gen.flow(images_data, images_labels,
batch_size=batch_size):
# Here you can do whatever you like to your batch
yield (batch[0], batch[1])
Наконец, если вам нужна очень специфическая функциональность вашего ImageDataGenerator
, вы всегда можете создать свой собственный ImageDataGenerator
класс:
class ImageDataGeneratorCustom(ImageDataGenerator):
...
В частности, вы можете перезаписать функцию flow()
или даже собратькастом Iterator
.