Implementación 2
Construiremos una red neuronal convolucional para clasificar imagenes utilizando la base de datos Fashion MNIST y desarrollada en TensorFlow.
El dataset Fashion MNIST es un conjunto de datos de imágenes utilizado comúnmente para entrenar y evaluar algoritmos de aprendizaje automático, especialmente en tareas de clasificación de imágenes. Fue creado por la compañía de tecnología alemana Zalando
El conjunto contiene 70,000 imágenes en escala de grises de 28x28 píxeles entiquetados en 10 categorías diferentes de artículos de moda. Las categorias son: T-shirt/top, Trouser, Pullover, Dress, Coat, Sandal, Shirt, Sneaker, Bag y Ankle boot
Importamos los módulos necesarios
Fashion MNIST Dataset
Cargar el conjunto de datos Fashion MNIST
Para ver la información del dataset
Tambien podemos ver la referencia de conjunto de datos en la siguiente url: https://www.tensorflow.org/api_docs/python/tf/keras/datasets/fashion_mnist/load_data
Definimos una lista que donde el indice representa el nombre de la etiqueta
Preprocesamiento de datos
Este dataset no es necesario utilizar una función para obtener el conjuto de entrenamiento y de prueba, el conjunto ya viene dividido por default.
Visualización de una imagen
Es necesario fijar el índice de la imagen que vamos a visualizar
Obtener la imagen de la prenda y su etiqueta
Imprimimos la representación matricial (numérica) de la imagen
Mostramos la imagen con Matplotlib
Preprocesamiento de datos
Notemos la longitud del conjunto de entrenamiento y de test son respectivamente:
Normalizar las imágenes para normalizar los valores de píxeles
Red neuronal convolucional
Resumen del modelo anterior:
Entrada de la imagen: Una imagen de 28x28 píxeles con un canal (blanco y negro).
Primera capa Conv2D: Aplica 32 filtros 3x3, resultando en 32 mapas de características de 26x26.
Primera capa MaxPooling2D: Reduce el tamaño de cada uno de los 32 mapas de características a 13x13.
Segunda capa Conv2D: Aplica 64 filtros 3x3 a cada uno de los 32 mapas de características, resultando en 64 mapas de características de 11x11.
Segunda capa MaxPooling2D: Reduce el tamaño de cada uno de los 64 mapas de características a 5x5.
Tercera capa Conv2D: Aplica 64 filtros 3x3, resultando en 64 mapas de características de 3x3.
Flatten: Aplana los mapas de características a un vector de 576 características.
Dense (64 unidades): Reducción de dimensionalidad y aprendizaje de patrones globales.
Dense (10 unidades): Salida final con 10 unidades (una para cada clase de Fashion MNIST).
Cada convolución extrae características y patrones más complejos a medida que profundiza en la red, permitiendo al modelo hacer predicciones más precisas sobre la clase de las imágenes. Cada filtro aprende a detectar diferentes características de la imagen, como bordes, texturas o patrones específicos:
La cantidad de filtros en una capa convolucional afecta la capacidad del modelo para aprender características representativas de los datos. En general, más filtros permiten al modelo aprender una variedad más amplia de características, pero también incrementan la complejidad computacional y el número de parámetros del modelo.
Compilar el modelo
Crear un optimizador Adam con una tasa de aprendizaje del 0.001
Se compila el modelo utilizando el optimizador Adam y la función de pérdida de entropía cruzada categórica dispersa (sparse_categorical_crossentropy
) para la clasificación. El parámetro from_logits=True
indica que la salida de tu modelo no ha pasado por una función de activación como softmax
y son logits.
Los logits son los valores brutos de salida de la última capa del modelo, y pueden ser cualquier número real, no necesariamente entre 0 y 1. La función SparseCategoricalCrossentropy
con from_logits=True
primero aplicará una función softmax internamente para convertir los logits en probabilidades antes de calcular la pérdida.
También se puede usar directamente el nombre del optimizador ('adam') en el argumento optimizer
de la función compile
.
Entrenar el modelo
Se entrena el modelo en los datos de entrenamiento utilizando fit
. Se especifica el número de épocas, el tamaño del lote y la proporción de validación para monitorear el rendimiento del modelo durante el entrenamiento.
Evaluación
Evaluar el modelo en el conjunto de prueba
Se evalúa el rendimiento del modelo en el conjunto de prueba utilizando evaluate
. Se obtienen la pérdida y la precisión del modelo en los datos de prueba.
Predicciones
Calcular la matriz de confusión
Se calculan las predicciones del modelo en el conjunto de prueba y se obtienen las clases predichas. Se calcula la matriz de confusión utilizando confusion_matrix.
Visualizar la matriz de confusión y mostrar la sensibilidad para cada clase
BONUS:
Codigo para graficar una imagen con su etiqueta predicha
Last updated