Red multicapa con TensorFlow
Construiremos una red neuronal para clasificar dígitos escritos a mano en el conjunto de datos MNIST, que es un problema de clasificación de imágenes.
Importamos los módulos necesarios
MNIST Dataset
Cargar el conjunto de datos MNIST de dígitos escritos a mano
Exploramos el dataset
El resultado es:
Imprimimos la llave DESCR para obtener la información del conjuto de datos
Visualización de una imagen
Es necesario fijar el índice de la imagen que vamos a visualizar
Obtener la imagen del dígito y su etiqueta
Imprimimos la representación matricial (numérica) de la imagen
Mostramos la imagen con Matplotlib
Preprocesamiento de datos
Dividir los datos en conjuntos de entrenamiento y prueba
Notemos que la longitud del conjunto de entrenamiento y de test son respectivamente:
Notamos como se ve el primer elemento de la variable X_train
Escalar las imágenes para normalizar los valores de píxeles
Ahora notamos como se ve el primer elemento de la variable X_train
después de la normalización
Red neuronal multicapa
Definir el modelo de red neuronal
Se utiliza Sequential
para definir el modelo de red neuronal.
Se agrega una capa de aplanamiento (Flatten
) para convertir las imágenes en vectores unidimensionales. Se añaden capas ocultas densamente conectadas (Dense
) con activación ReLU y una capa de salida con activación softmax para clasificar los dígitos en 10 clases.
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.
También se puede usar directamente el nombre del optimizador ('adam') en el argumento optimizer
de la función compile
. En lugar de definir un optimizador personalizado.
La función de pérdida sparse_categorical_crossentropy
es adecuada cuando las etiquetas de clase son enteros (como 0, 1, 2, ...) en lugar de codificación one-hot.
Otras funciones de pérdida comunes para clasificación incluyen categorical_crossentropy
para etiquetas one-hot y binary_crossentropy
para problemas de clasificación binaria.
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.
Calcular la matriz de confusión y la sensibilidad (recall)
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.
Se calcula la sensibilidad (recall) para cada clase utilizando recall_score
.
Visualizar la matriz de confusión y mostrar la sensibilidad para cada clase
Se visualiza la matriz de confusión como una imagen de colores utilizando sns.heatmap.
Se muestra la sensibilidad (recall) para cada clase.
El recall mide la proporción de instancias positivas que fueron correctamente identificadas por el modelo sobre el total de instancias positivas en el conjunto de datos. En otras palabras, el recall indica qué tan efectivo es el modelo para encontrar todas las instancias positivas en comparación con el total de instancias positivas reales en el conjunto de datos.
Un recall de 1.0 (100%) significa que el modelo identifica todas las instancias positivas correctamente, es decir, no hay falsos negativos.
Un recall de 0.0 (0%) indica que el modelo no identifica ninguna instancia positiva correctamente, es decir, todos los casos positivos son clasificados como negativos (falsos negativos).
En resumen, un recall alto es deseable en problemas donde la detección de instancias positivas es crítica, mientras que un recall bajo puede indicar que el modelo necesita mejorar su capacidad para identificar verdaderos positivos.
Last updated