Я хочу приспособить набор данных fashion mnist к предварительно обученной модели Keras. Исходные данные - серые изображения, имеющие форму (28, 28). Я должен преобразовать его в форму (224, 224, 3), чтобы соответствовать требованиям модели. Тем не менее, я не могу преобразовать весь набор (60K сэмплов) за один раз, так как он слишком велик для памяти / процессора моей машины, что делает его замороженным. Я пытаюсь использовать генератор данных Keras для подачи мини-пакета из 32 выборок в функцию преобразования, но это приводит к ValueError. Мой код ниже:
# Get the data
from keras.datasets import fashion_mnist
(x, y), (x_test, y_test) = fashion_mnist.load_data()
# Function to transform data to required shape
def transform_dat(img, lbl):
img = np.array([cv2.merge((idx, idx, idx)) for idx in img])
img = np.array([cv2.resize(idx, (224, 224)) for idx in img])
lbl = to_categorical(lbl, num_classes=10)
return img, lbl
# Fit to a pre-trained model
datagen_train = ImageDataGenerator(rescale=1./255)
datagen_val = ImageDataGenerator(rescale=1./255)
# This will freeze my pc due to the transform function applied to large dataset
history = model.fit_generator(datagen_train.flow(transform_dat(x, y)),
steps_per_epoch=len(x) / 32,
epochs=5,
validation_data=datagen_val.flow(transform_dat(x_test, y_test)),
validation_steps=len(x_test) / 32)
# This will result in error due to wrong shape
history = model.fit_generator(transform_dat(datagen_train.flow(x, y)),
steps_per_epoch=len(x) / 32,
epochs=5, validation_data=transform_dat(datagen_val.flow(x_test, y_test)),
validation_steps=len(x_test) / 32)
ValueError: ('Input data in `NumpyArrayIterator` should have rank 4. You passed an array with shape', (32, 28, 28))
Не могли бы вы помочь мне решить проблему, то есть создать генератор, который выдает небольшие партии, где возможности моей машины могут применять функцию преобразования, которая преобразует данные в правильную форму для модели?
Заранее спасибо.