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.

¿Cómo utilizar varios conjuntos de datos de imágenes como entradas y salidas para la red Keras?

En este momento estoy tratando de unir un conjunto de datos que se encuentra disperso en diferentes carpetas en uno solo, este conjunto de datos no tiene etiquetas ya que es una aplicación similar a un codificador automático. El código en este momento está creando los conjuntos de datos de la siguiente manera:

Primer generador de datos: imágenes originales

clean_datagen = preprocessing.image_dataset_from_directory(clean_path, label_mode=None, batch_size=batch_dimension, shuffle=False, validation_split = validation_partition, subset=”validation”)

Segundo generador de datos: imágenes ruidosas

noisy_datagen = preprocessing.image_dataset_from_directory(noisy_path, label_mode=None, batch_size=batch_dimension, shuffle=False, validation_split = validation_partition, subset=”validation”)

Tercer generador de datos: imágenes desruidas

denoised_datagen = preprocessing.image_dataset_from_directory(denoised_path, label_mode=None, batch_size=batch_dimension, shuffle=False, validation_split = validation_partition, subset=”validation”)

Cuarto generador de datos: niveles de ruido

maps_datagen = preprocessing.text_dataset_from_directory(maps_path, label_mode=None, batch_size=batch_dimension, shuffle=False, validation_split = validation_partition, subset=”validation”)

La red toma entradas de la siguiente manera:

([x_images, x_noise_level_map, x_denoised], y_images)

donde:
– x_images debe provenir de noisy_datagen
– x_noise_level_map debe provenir de maps_datagen
– x_denoised debe provenir de denoised_datagen
– y_images debe provenir de clean_datagen

Así que necesito juntar todos estos conjuntos de datos. He estado investigando aquí y viendo a las personas usando flow_from_directory y algunos de los métodos que derivan de él, pero parece estar obsoleto. ¿Alguna idea de cómo hacer esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una forma de combinar estos conjuntos de datos en uno sólo es utilizando la función zip en Python. Esta función combina múltiples iterables en un iterador basado en tuplas.

    Puedes crear un generador que produzca tuplas con los datos requeridos de la siguiente manera:

    combined_dataset = zip(noisy_datagen, maps_datagen, denoised_datagen, clean_datagen)
    

    Luego, puedes iterar sobre este generador y extraer las entradas y salidas requeridas:

    for (x_noisy, x_maps, x_denoised, y_clean) in combined_dataset:
        # realizar entrenamiento con estas entradas y salidas
    

    Alternativamente, puedes crear un generador de datos personalizado que obtenga datos de los cuatro conjuntos:

    def combined_datagen(noisy_datagen, maps_datagen, denoised_datagen, clean_datagen):
        while True:
            x_noisy = next(noisy_datagen)
            x_maps = next(maps_datagen)
            x_denoised = next(denoised_datagen)
            y_clean = next(clean_datagen)
            yield ([x_noisy, x_maps, x_denoised], y_clean)
    

    Luego, puedes utilizar este generador para entrenar la red:

    combined_gen = combined_datagen(noisy_datagen=noisy_datagen, maps_datagen=maps_datagen, denoised_datagen=denoised_datagen, clean_datagen=clean_datagen)
    
    model.fit(combined_gen, steps_per_epoch=num_steps_per_epoch, epochs=num_epochs, validation_data=val_data)
    

Comments are closed.