CNN – Preprocesamiento de datos de imagen con generadores

El artículo tiene como objetivo aprender cómo preprocesar los datos de la imagen de entrada para convertirlos en tensores de punto flotante significativos para alimentar las redes neuronales convolucionales. Solo porque los tensores de conocimiento se utilizan para almacenar datos, se pueden asumir como arrays multidimensionales. Un tensor que representa una imagen de 64 X 64 con 3 canales tendrá sus dimensiones (64, 64, 3). Actualmente, los datos se almacenan en un disco como archivos JPEG, así que veamos los pasos que se siguen para lograrlo.

Algoritmo:

  • Lea los archivos de imagen (almacenados en la carpeta de datos).
  • Decodifique el contenido JPEG en cuadrículas RGB de píxeles con canales.
  • Conviértalos en tensores de punto flotante para la entrada a las redes neuronales.
  • Vuelva a escalar los valores de píxel (entre 0 y 255) al intervalo [0, 1] (ya que el entrenamiento de redes neuronales con este rango se vuelve eficiente).

Puede parecer un poco quisquilloso, pero Keras tiene utilidades para hacerse cargo de todo este algoritmo y hacer el trabajo pesado por usted. Keras tiene un módulo con herramientas de ayuda para el procesamiento de imágenes, ubicado en keras.preprocessing.image. Contiene la clase ImageDataGenerator , que le permite configurar rápidamente generadores de Python que pueden convertir automáticamente archivos de imagen en el disco en lotes de tensores preprocesados.

Código: Implementación práctica:

# Importing the ImageDataGenerator for pre-processing 
from keras.preprocessing.image import ImageDataGenerator
  
# Initialising the generators for train and test data
# The rescale parameter ensures the input range in [0, 1] 
train_datagen = ImageDataGenerator(rescale = 1./255)
test_datagen = ImageDataGenerator(rescale = 1./255)
  
# Creating the generators with each batch of size = 20 images
# The train_dir is the path to train folder which contains input classes
# Here it is 'cat' and 'dog' so class_mode is binary
  
train_generator = train_datagen.flow_from_directory(
                  train_dir,
                  target_size =(150, 150),  # target_size = input image size
                  batch_size = 20,
                  class_mode ='binary')
  
  
test_generator = test_datagen.flow_from_directory(
                    test_dir,
                    target_size =(150, 150),
                    batch_size = 20,
                    class_mode ='binary')

Producción:

It yields batches of 150 × 150 RGB images of shape (20, 150, 150, 3) 
and binary labels of shape (20, ).

Ajuste del modelo:
ajustemos el modelo a los datos usando el generador, se hace usando el método fit_generator, el equivalente de ajuste para generadores de datos como se muestra a continuación. Su primer argumento es un generador de Python que generará lotes de entradas y objetivos indefinidamente porque los datos se generan sin cesar, el modelo de Keras necesita saber cuántas muestras extraer del generador antes de declarar una época terminada. Esta es la función del argumento pasos_por_época .
Ahora decida el parámetro steps_per_epoch , ya que tenemos un total de 2000 imágenes de entrenamiento y cada lote tiene un tamaño de 20, por lo tanto, los steps_per_epoch serán 2000/20 = 100.
Código:

# Your compiled model being trained with fit_generator
history = model.fit_generator(
             train_generator,
             steps_per_epoch = 100,
             epochs = 30,
             validation_data = test_generator,
             validation_steps = 50)
  
# Note: here the validation steps are necessary because
# the test_genrator also yield batches indefinitely in loops

Publicación traducida automáticamente

Artículo escrito por infoaryan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *