El cuaderno que proporcionaste es un cuaderno de Python para construir y entrenar una Red Neuronal Convolucional (CNN) para reconocer lecturas de medidores de energía. Aquí tienes un desglose detallado:
1. Preparación de Datos
- Augmentor: El cuaderno comienza mencionando Augmentor, una biblioteca de Python utilizada para la aumentación de imágenes. Esto significa generar variaciones de las imágenes existentes (como voltear, rotar, distorsionar) para aumentar el tamaño y la diversidad del conjunto de datos de entrenamiento.
- Carga de Datos: El código carga imágenes de dos directorios:
'./data/raw-data-energy-meters/no-meter-readings-raw/'
: Imágenes de medidores sin lecturas.'./data/raw-data-energy-meters/meter-readings/'
: Imágenes de medidores con lecturas.
- Preprocesamiento de Imágenes:
- El código lee las imágenes en escala de grises utilizando
cv2.imread(..., cv2.IMREAD_GRAYSCALE)
. - Las imágenes se redimensionan a un tamaño fijo (100x100 píxeles) utilizando
cv2.resize()
. - Los datos se barajan para garantizar que el modelo no aprenda patrones basados en el orden de las imágenes.
- Finalmente, los valores de los píxeles se normalizan dividiendo por 255.0, lo cual es una práctica común en el procesamiento de imágenes para CNN.
- El código lee las imágenes en escala de grises utilizando
2. Definición y Entrenamiento del Modelo
- Ajuste de Hiperparámetros: El cuaderno define tres listas de hiperparámetros para explorar:
dense_layers
: Número de capas densas en el modelo (0, 1 o 2).layer_sizes
: Número de nodos en cada capa convolucional y densa (32, 64 o 128).conv_layers
: Número de capas convolucionales (1, 2 o 3).
- Arquitectura del Modelo:
- Se crea un modelo
Sequential
utilizando TensorFlow Keras. - El modelo consta de las siguientes capas:
- Capa de Entrada: Define la forma de entrada (100x100x1) basada en las imágenes preprocesadas.
- Capas Convolucionales: El código agrega el número especificado de capas convolucionales, cada una con un tamaño de filtro de (3, 3) y el número especificado de nodos. Se utiliza la activación ReLU para la no linealidad.
- Capas de Max Pooling: Se agregan capas de max pooling después de cada capa convolucional para reducir las dimensiones espaciales de los mapas de características y evitar el sobreajuste.
- Capa Flatten: Aplana la salida de las capas convolucionales en un vector 1D.
- Capas Densas: Agrega el número especificado de capas densas. De nuevo, se utiliza la activación ReLU.
- Capa de Salida: Se utiliza una sola capa densa con activación sigmoide para producir una puntuación de probabilidad entre 0 y 1, que indica la probabilidad de que la imagen de entrada sea una lectura de medidor.
- Se crea un modelo
- Compilación: El modelo se compila con:
- Función de Pérdida: Se utiliza 'binary_crossentropy' para la clasificación binaria.
- Optimizador: 'adam' es una opción popular para optimizar CNN.
- Métricas: Se utiliza 'accuracy' para rastrear el rendimiento del modelo.
- Entrenamiento: El modelo se entrena utilizando
model.fit()
:- Datos de Entrenamiento: Las imágenes preprocesadas se dividen en conjuntos de entrenamiento y validación.
- Tamaño del Lote: Se procesan 16 imágenes en cada lote.
- Épocas: El modelo se entrena durante 20 épocas.
- División de Validación: El 10% de los datos de entrenamiento se utiliza para la validación durante el entrenamiento.
- Evaluación: Después del entrenamiento, el modelo se evalúa en el conjunto de prueba utilizando
model.evaluate()
. Se imprimen la pérdida y la precisión. - Cálculo del AUC: El cuaderno intenta calcular el Área Bajo la Curva (AUC) utilizando
roc_auc_score
de scikit-learn. Esta métrica es útil para evaluar la capacidad del modelo para distinguir entre lecturas de medidores y no lecturas. - Guardar el Modelo: El modelo entrenado se guarda utilizando
model.save()
.
3. Predicción
- Preparación de la Imagen: Se define una función
prepare(filepath)
para convertir una imagen en el formato correcto para la predicción. Lee la imagen, la redimensiona a 100x100 y la redimensiona para que coincida con la forma de entrada del modelo. - Carga del Modelo: El cuaderno carga el modelo guardado utilizando
tf.keras.models.load_model()
. Busca el archivo de modelo más recientemente guardado en el directorio'04_energy_meters_recognition_cnn'
. - Predicción: El modelo cargado se utiliza para hacer predicciones en dos imágenes de ejemplo:
'./img/meter-test-1.jpg'
: Una imagen de un medidor de energía.'./img/meter-test-2.jpg'
: Una imagen que podría confundir a la CNN (que contiene dígitos).
- Salida: Las categorías predichas (ya sea 'meter-readings' o 'no-meter-readings') se imprimen en función de las puntuaciones de probabilidad que produce el modelo.
Puntos Clave
- Aumentación de Imágenes: La aumentación de los datos de entrenamiento es crucial para mejorar la capacidad de generalización del modelo y evitar el sobreajuste.
- Ajuste de Hiperparámetros: El cuaderno demuestra cómo explorar sistemáticamente diferentes combinaciones de hiperparámetros para encontrar el modelo con mejor rendimiento.
- Arquitectura del Modelo: La arquitectura de la CNN está diseñada para extraer características de las imágenes y clasificarlas en las categorías deseadas.
- Evaluación: La evaluación del modelo en un conjunto de prueba separado es esencial para evaluar su rendimiento en datos no vistos.
- AUC: AUC es una métrica valiosa para los problemas de clasificación binaria, que indica la capacidad del modelo para clasificar correctamente los ejemplos positivos y negativos.
En general, este cuaderno proporciona un buen punto de partida para construir una CNN para reconocer lecturas de medidores de energía. Al experimentar con diferentes hiperparámetros y técnicas de aumentación de datos, puedes mejorar aún más la precisión y la robustez del modelo.