В соответствии с документами keras:
preprocessing_function: функция, которая будет подразумеваться на каждом входе.Функция запустится после изменения размера и увеличения изображения.Функция должна принимать один аргумент: одно изображение (тензор Numpy с рангом 3) и выводить тензор Numpy той же формы.
Мой тензор Numpy имеет ранг 5, потому что мои входные изображения имеют 3 измерения (высоту)., ширина, глубина).
from keras.preprocessing.image import ImageDataGenerator
label_datagen = ImageDataGenerator()
train_label_generator = label_datagen.flow_from_directory(
directory="some_directory",
target_size=(32, 32, 32),
color_mode='grayscale',
class_mode=None,
batch_size=4)
Когда я проверяю первую партию, я получаю свой 5-мерный тензор:
first_item = train_image_generator.__getitem__(0)
>>>print('first_item.shape')
(4, 32, 32, 32, 1)
Теперь я сначала хочу сделать простую операцию на каждом входеизображение, я также проверяю форму ввода, печатая ее:
def some_function(arr):
print(arr.shape)
arr += 1
return arr
Здесь я добавляю эту функцию в свой ImageDataGenerator:
label_datagen = FixedImageDataGenerator(preprocessing_function=some_function)
Это то, что я получаю в качестве формы ввода
(32, 32, 1)
, что означает, что он действительно ограничен рангом 3. Любая идея, как я могу изменить это так, чтобы форма ввода была (32, 32, 32)
?
Моя цель - использовать функцию to_categorical
на каждом входе в ImageDataGenerator.Я не могу просто сказать class_mode="categorical"
, поскольку я делаю семантическую сегментацию (не классификацию изображений).Я знаю, что мог бы написать некоторый пользовательский код для генераторов для этой цели, но я хочу знать, будет ли трудно изменить keras ImageDataGenerator.