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.

Keras Creando Detección de Imágenes forma incompatible

Estoy trabajando en un pequeño proyecto en el que quiero clasificar algunas imágenes entrenándolas dentro de una red convolucional con una red VGG16 pre-entrenada.

Estos son los pasos que he seguido:

#Establecer condiciones
img_size = (180,180)
batch_size = 600
num_classes = len(class_names)

#Utilizando el método de procesamiento incorporado de Keras, que facilita el procesamiento en lugar de tener que hacerlo manualmente.

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
“Data/Train”,
validation_split = 0.2,
subset = “training”,
seed = 1337, #crear una semilla para…
image_size = img_size,
batch_size = batch_size,
)

valid_ds = tf.keras.preprocessing.image_dataset_from_directory(
“Data/Train”,
validation_split = 0.2,
subset = “validation”,
seed = 1337, #crear una semilla para…
image_size = img_size,
batch_size = batch_size,
)

CONSTRUYENDO EL MODELO

#Crear modelo
model = Sequential()

#AGREGAR la red preentrenada VGG16
model.add(VGG16(pooling =’avg’,weights=”imagenet”, include_top=False))

#agregar una capa densa
model.add(Dense(num_classes,activation =’softmax’))

#Establecer el parámetro ‘trainable’ de VGG16 en falso, ya que queremos utilizar esta red preentrenada y entrenar las nuevas imágenes.

model.layers[0].trainable = False

#El método compile(): especificar una función de pérdida, métricas y un optimizador. Para entrenar un modelo con fit(), necesitas especificar una función de pérdida, un optimizador y, opcionalmente, algunas métricas para monitorizar.
#Pasas estos como argumentos al modelo en la llamada al método compile()

model.compile(optimizer = ‘adam’,loss = ‘categorical_crossentropy’, metrics =[‘accuracy’])
epoch_train = len(train_ds)
epoch_val = len(valid_ds)
numbers_epochs = 2

fit_model = model.fit(train_ds, steps_per_epoch = epoch_train,verbose = 1, validation_data = valid_ds, validation_steps = epoch_val,)

Cuando intento ajustar el modelo, obtengo el siguiente error:

ValueError: Las formas (None, 1) y (None, 43) son incompatibles

Si hay algún experto ahí fuera que pueda señalar lo que hice mal o qué pasos omití… ¡Estaría muy agradecido!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “ValueError: Las formas (None, 1) y (None, 43) no son compatibles” indica que hay una inconsistencia de forma en su capa de salida. Parece que su capa de salida no está configurada para manejar correctamente la cantidad de clases que está intentando clasificar.

    Un posible problema podría ser el valor de la variable “num_classes”. Asegúrese de que este valor coincida con la cantidad de clases en su conjunto de datos.

    Otro problema podría estar en la forma en que está configurando su capa de salida. Podría ser útil establecer explícitamente la forma de salida de la capa utilizando el parámetro “units”, de esta manera:

    model.add(Dense(units=num_classes, activation='softmax'))
    

    Además, asegúrese de que sus conjuntos de datos de entrenamiento y validación se estén cargando correctamente y que las etiquetas de clase estén codificadas correctamente.

    Por último, podría ser útil imprimir las formas de sus datos y capas del modelo durante el entrenamiento para diagnosticar cualquier otra inconsistencia de forma.

    ¡Espero que esto sea útil!

Comments are closed.