es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Estandarización de datos mediante ImageDataGenerator

Tengo una carpeta que se llama ‘train’, la cual está dividida en 8 subcarpetas en las cuales cada una contiene los datos (imágenes) de una clase (por lo tanto, mi conjunto de datos es de múltiples clases con 8 clases). Ahora tengo las siguientes preguntas:
1) Necesito hacer una estandarización de características y, por lo tanto, necesito utilizar datagen.fit(xtrain), pero no sé cómo crear x
_train con todos mis datos, los cuales están separados en diferentes carpetas ya que no he trabajado antes con imágenes en Python. Nota: tengo suficiente memoria para almacenar todos los datos a la vez.

2) Dado que tengo 8 clases, ¿se calculan las estadísticas de cada clase por separado? En caso afirmativo, ¿cómo puedo hacerlo utilizando el .fit(x_train)?

Tags:  , ,

Answer

  1. Avatar for davy.ai
    1. Para crear x_train con todos los datos de la carpeta ‘train’, puedes utilizar la clase ImageDataGenerator del módulo tf.keras.preprocessing.image. Esta clase genera lotes de datos aumentados a partir de archivos de imágenes en un directorio. Puedes crear una instancia de esta clase y llamar a su método flow_from_directory para generar datos aumentados a partir de tus imágenes y almacenarlos en un arreglo de numpy. Aquí tienes un ejemplo:
    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    
    datagen = ImageDataGenerator(
        # definir la estandarización por característica
        featurewise_center=True,
        featurewise_std_normalization=True
    )
    
    # generar lotes de datos aumentados desde la carpeta de entrenamiento
    train_generator = datagen.flow_from_directory(
        directory='train',
        target_size=(img_height, img_width), # especificar el tamaño de la imagen (alto y ancho)
        color_mode="rgb",
        batch_size=batch_size,
        class_mode="categorical", # especificar el modo de clase para un problema de múltiples clases
        shuffle=True, # mezclar los datos en cada época
    )
    
    # ajustar el generador de datos con los datos de entrenamiento para calcular la desviación estándar y la media de cada canal
    datagen.fit(train_generator)
    
    # crear un arreglo de numpy a partir de los datos aumentados
    x_train, y_train = train_generator.next()
    
    1. Por defecto, el ImageDataGenerator calcula las estadísticas (media y desviación estándar) de los datos de entrada de forma global, es decir, para todas las clases combinadas. Sin embargo, puedes calcular las estadísticas por separado para cada clase especificando el parámetro per_channel en el argumento featurewise_std_normalization. Aquí tienes un ejemplo:
    # definir la estandarización por característica, con estadísticas calculadas por separado para cada canal
    datagen = ImageDataGenerator(
        featurewise_center=True,
        featurewise_std_normalization=True,
        per_channel=True # calcular la desviación estándar para cada canal por separado
    )
    
    # generar lotes de datos aumentados desde la carpeta de entrenamiento
    train_generator = datagen.flow_from_directory(
        directory='train',
        ...
    )
    
    # ajustar el generador de datos con los datos de entrenamiento para calcular la desviación estándar y la media de cada canal
    datagen.fit(train_generator)
    
    # crear un arreglo de numpy a partir de los datos aumentados
    x_train, y_train = train_generator.next()
    

    En este caso, las estadísticas se calculan por separado para cada canal (R, G, B) de cada clase.

Comments are closed.