¿Cómo puedo aplicar la rotación a la imagen en Keras sin usar model.fit_generator?

Estoy trabajando en un problema de clasificación de píxeles de imagen utilizando redes neuronales de convolución. El tamaño de mis images entrenamiento es 128x128x3 y el tamaño de la mask etiqueta es 128x128

Hago entrenamiento en Keras de la siguiente manera:

 Xtrain, Xvalid, ytrain, yvalid = train_test_split(images, masks,test_size=0.3, random_state=567) model.fit(Xtrain, ytrain, batch_size=32, epochs=20, verbose=1, shuffle=True, validation_data=(Xvalid, yvalid)) 

Sin embargo, quiero aplicar una rotación aleatoria 2D a Xtrain y ytrain que también es de tamaño 128x128x3 y 128x128 respectivamente. Más específicamente, quiero aplicar esta rotación para cada iteración de época.

Por el momento, me gustaría continuar usando model.fit y no usar model.fit_generator , ya que sé que el aumento de datos se realiza comúnmente usando .fit_generator .

Básicamente, quiero hacer un bucle con model.fit para que Xtrain y ytrain se roten al azar para cada época. Soy nuevo en Python y Keras, así que cualquier información es bienvenida si esto es posible.

Este es un ejemplo del uso de ImageDataGenerator para guardar la salida en un directorio específico, evitando así el requisito de usar model.fit_generator.

 from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img datagen = ImageDataGenerator( rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest') img = load_img('data/train/cats/cat.0.jpg') # this is a PIL image x = img_to_array(img) # this is a Numpy array with shape (3, 150, 150) x = x.reshape((1,) + x.shape) # this is a Numpy array with shape (1, 3, 150, 150) # the .flow() command below generates batches of randomly transformed images # and saves the results to the `preview/` directory i = 0 for batch in datagen.flow(x, batch_size=1, save_to_dir='preview', save_prefix='cat', save_format='jpeg'): i += 1 if i > 20: break # otherwise the generator would loop indefinitely 

Tomado de aquí: https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

Puede cambiar los argumentos para que se adapten a su caso de uso y luego generar su X_train y X_valid o cualquier otro conjunto de datos, luego cargar en la memoria y usar el modelo antiguo y simple.