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 se concatenan dos objetos generadores antes de ajustar el modelo?

Quiero normalizar las imágenes de entrenamiento y validación con un generador, y obtener nuevas imágenes de las vistas de entrenamiento y validación con otro generador. Luego, quiero combinarlos y entrenarlos por separado. ¿Cómo puedo hacer esta operación de fusión? Estoy obteniendo un error.

Valor de error: la capa de modelo espera 1 entrada (s), pero recibió 2 tensores de entrada. Entradas recibidas: [& lt; tf.Tensor ‘IteratorGetNext: 0’ shape = (Ninguno, Ninguno, Ninguno, Ninguno) dtype = float32 & gt ;, & lt; tf.Tensor ‘IteratorGetNext: 1’ shape = (Ninguno, Ninguno, Ninguno, Ninguno) dtype = float32 & gt;]

Rutas de imágenes

train_path = “train/”
valid_path = “valid/”

from tensorflow.keras.preprocessing.image import ImageDataGenerator
import numpy as np
from keras.utils.np_utils import to_categorical

********************ENTRENAMIENTO **************************

train_datagen1 = ImageDataGenerator(rescale=1./255)
train_generator1 = train_datagen1.flow_from_directory(
train_path,
save_to_dir=”train_augm/”,
target_size=(224, 224),
batch_size=6)

train_datagen2 = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
….)
train_generator2 = train_datagen2.flow_from_directory(
train_path,
target_size=(224, 224),
batch_size=6)

****************** VALIDACIÓN *******************************

validation_datagen1 = ImageDataGenerator(rescale=1./255)
validation_generator1 = validation_datagen1.flow_from_directory(
valid_path,
save_to_dir=”valid_augm/”,
target_size=(224, 224),
batch_size=3)

validation_datagen2 = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
….)
validation_generator2 = validation_datagen2.flow_from_directory(
valid_path,
target_size=(224, 224),
batch_size=3)

def combine_generator1(gen1, gen2):
while True:
X1i = gen1.next()
X2i = gen2.next()
yield [X1i[0], X2i[0]], X2i[1] #Yield both images and their mutual label

def combine_generator2(gen_v1, gen_v2):
while True:
V1i = gen_v1.next()
V2i = gen_v2.next()
yield [V1i[0], V2i[0]], V2i[1] #Yield both images and their mutual label

train_generator = combine_generator1(train_generator1, train_generator2)
validation_generator = combine_generator2(validation_generator1, validation_generator2)

********************ENTRENANDO EL MODELO *************************

history = new_model.fit(
train_generator,
epochs=5,
validation_data = validation_generator,
shuffle = True,
verbose = 1)

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error se debe a que el modelo espera solo una entrada, pero la combinación del generador proporciona dos entradas. Para resolver este error, puede modificar las funciones de combine_generator para fusionar los dos generadores en un solo generador que proporcione una entrada y una salida.

    Aquí hay un código actualizado que debería funcionar:

    def combine_generator(gen1, gen2):
        while True:
            X1i = gen1.next()
            X2i = gen2.next()
            yield np.concatenate([X1i[0], X2i[0]], axis=0), X2i[1]
    
    train_generator = combine_generator(train_generator1, train_generator2)    
    validation_generator = combine_generator(validation_generator1, validation_generator2)
    
    # ENTRENANDO EL MODELO 
    history = new_model.fit(
        train_generator,
        epochs=5,
        validation_data=validation_generator,
        shuffle=True,
        verbose=1)
    

    En el código actualizado, la función combine_generator obtiene un lote de imágenes de cada uno de los dos generadores de entrada, luego concatena los lotes de imágenes a lo largo del primer eje (es decir, el eje de lote) para crear un tensor de entrada de forma (batch_size * 2, height, width, channels). La función luego devuelve este tensor de entrada junto con el tensor de etiquetas del segundo generador.

    Al concatenar los lotes de imágenes de los dos generadores, esencialmente proporcionamos al modelo ambos tipos de imágenes aumentadas en cada lote, lo que nos permite entrenar en ambos tipos de imágenes simultáneamente.

Comments are closed.