Skip to content

Instantly share code, notes, and snippets.

@johnfelipe
Created September 9, 2024 13:46
Show Gist options
  • Save johnfelipe/3be3edede097bf871b839183b1db8d5f to your computer and use it in GitHub Desktop.
Save johnfelipe/3be3edede097bf871b839183b1db8d5f to your computer and use it in GitHub Desktop.

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.

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.
  • 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment