3.12 - Práctica 1: clasificación de imágenes usando la red LeNet
Lección 12 de la sección “Redes Convolucionales” del curso Fundamentos de Deep Learning con Python.
Tabla de contenido
Introducción
En la lección anterior vimos las principales características de la red LeNet y su importancia como precursora de las Redes Convolucionales usadas actualmente.
En esta lección veremos cómo implementar esta arquitectura, con ayuda de Python y Keras, para resolver un problema de clasificación de imágenes.
Suscríbete y accede al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online
El problema a resolver
En esta práctica el problema a resolver será el mismo que dio origen a LeNet: implementaremos y entrenaremos una Red Convolucional capaz de clasificar automáticamente un dígito escrito a mano presente en una imagen digital.
El set de datos
Usaremos MNIST (Modified National Institute of Standards and Technology), un set de datos que contiene dígitos escritos a mano (60.000 de entrenamiento y 10.000 de prueba).
Cada imagen corresponde a una de 10 posibles categorías (los números del 0 al 9) y está almacenada en escala de grises, con un tamaño de 28x28 pixeles.
Usaremos la librería Keras, y en particular el módulo mnist
para leer los sets de entrenamiento y prueba.
Normalización y reajuste del tamaño de los sets
Antes de introducir los datos al modelo que implementaremos en Keras, debemos realizar tres procedimientos:
- Normalizar los valores de los pixeles al rango entre 0 y 1, lo cual hacemos simplemente dividiendo cada pixel, en cada imagen, entre 255
- Reajustar el tamaño de cada set (entrenamiento y prueba) para indicar explícitamente el número de canales (1). Esto lo podemos hacer con ayuda de la función
expand_dims
de Numpy - Representar cada categoría en el formato one-hot, usando el módulo
to_categorical
de la librería Keras
Creación y entrenamiento del modelo
Usaremos el mismo enfoque secuencial visto en las prácticas anteriores para la implementación del modelo.
Sin embargo, en este caso por tratarse de una Red Convolucional, haremos uso adicionalmente de los módulos Conv2D
, MaxPooling2D
y Flatten
de Keras para realizar la implementación.
De nuevo, al igual que en prácticas anteriores, realizaremos el entrenamiento usando el algoritmo del Gradiente Descendente con un total de 20 iteraciones y un tamaño de lote de 128.
Resultados del entrenamiento
Vemos que la red LeNet que acabamos de entrenar tiene un excelente desempeño con ambos sets de datos. En el caso del entrenamiento alcanza una exactitud del 99.88%, mientras que con el set de prueba se tiene un valor similar: 98.99%.
Con esto concluimos que el modelo logra clasificar con un altísimo grado de exactitud nuestro set de datos (menos de 1 error por cada 100 imágenes) y que además logra generalizar correctamente (pues el desempeño con el set de prueba es muy similar al obtenido con el set de entrenamiento).
Recuerda suscribirte para acceder al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online
Conclusión
Muy bien, ya logramos implementar y poner a prueba la red LeNet con ayuda de la librería Keras, y hemos confirmado que efectivamente las Redes Convolucionales resultan siendo una excelente alternativa para tareas de clasificación como la analizada en esta práctica.
En la próxima lección veremos dos arquitecturas, derivadas de LeNet y desarrolladas en los últimos años, y que han logrado alcanzar un desempeño comparable con el del ser humano en estas tareas de clasificación de imágenes. Hablaremos entonces en detalle de AlexNet y VGGNet.