Saltar al contenido

Matriz de confusión sobre imágenes en CNN keras

Contamos con la mejor solución que hallamos en internet. Nosotros esperamos que te resulte útil y si quieres comentarnos alguna mejora hazlo libremente.

Solución:

Aquí se explica cómo obtener la matriz de confusión (o tal vez estadísticas usando scikit-learn) para todas las clases:

1.Predecir clases

test_generator = ImageDataGenerator()
test_data_generator = test_generator.flow_from_directory(
    test_data_path, # Put your path here
     target_size=(img_width, img_height),
    batch_size=32,
    shuffle=False)
test_steps_per_epoch = numpy.math.ceil(test_data_generator.samples / test_data_generator.batch_size)

predictions = model.predict_generator(test_data_generator, steps=test_steps_per_epoch)
# Get most likely class
predicted_classes = numpy.argmax(predictions, axis=1)

2.Obtenga clases y etiquetas de clase reales

true_classes = test_data_generator.classes
class_labels = list(test_data_generator.class_indices.keys())   

3. Usa scikit-learn para obtener estadísticas

report = metrics.classification_report(true_classes, predicted_classes, target_names=class_labels)
print(report)    

Usted puede leer más aquí

EDITAR: si lo anterior no funciona, mire este video Crear matriz de confusión para predicciones del modelo Keras. Probablemente revise los comentarios si tiene un problema. O haga predicciones con un clasificador de imágenes Keras CNN

¿Por qué la función scikit-learn no haría el trabajo? Reenvía todas sus muestras (imágenes) en el conjunto de prueba/entrenamiento, convierte una codificación en caliente en codificación de etiquetas (ver enlace) y la pasa a sklearn.metrics.confusion_matrix como y_pred. Se procede de manera similar con y_true (uno caliente para etiquetar).

Código de muestra:

import sklearn.metrics as metrics

y_pred_ohe = KerasClassifier.predict(X)  # shape=(n_samples, 12)
y_pred_labels = np.argmax(y_pred_ohe, axis=1)  # only necessary if output has one-hot-encoding, shape=(n_samples)

confusion_matrix = metrics.confusion_matrix(y_true=y_true_labels, y_pred=y_pred_labels)  # shape=(12, 12)

Aquí gatos y perros son las etiquetas de clase:

#Confusion Matrix and Classification Report
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix

Y_pred = model.predict_generator(validation_generator, nb_validation_samples // 
batch_size+1)
y_pred = np.argmax(Y_pred, axis=1)

print('Confusion Matrix')
print(confusion_matrix(validation_generator.classes, y_pred))

print('Classification Report')
target_names = ['Cats', 'Dogs']
print(classification_report(validation_generator.classes, y_pred, target_names=target_names))

Acuérdate de que tienes la opción de decir si te fue preciso.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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