En este tema, exploraremos dos componentes fundamentales de las Redes Neuronales Convolucionales (CNN): las capas convolucionales y las capas de pooling. Estas capas son esenciales para el procesamiento y la extracción de características en tareas de visión por computadora.
- Capas Convolucionales
1.1. ¿Qué es una capa convolucional?
Una capa convolucional aplica un filtro (o kernel) a una entrada (como una imagen) para producir una salida (o mapa de características). Este proceso se conoce como convolución. La convolución permite a la red extraer características locales de la entrada, como bordes, texturas y patrones.
1.2. Parámetros de la capa convolucional
- Filtros (Kernels): Son matrices pequeñas que se deslizan sobre la entrada para realizar la convolución. Cada filtro detecta una característica específica.
- Stride: Es el paso con el que el filtro se desliza sobre la entrada. Un stride mayor reduce el tamaño del mapa de características.
- Padding: Es la adición de ceros alrededor de la entrada para controlar el tamaño del mapa de características. Puede ser 'valid' (sin padding) o 'same' (con padding para mantener el tamaño).
1.3. Ejemplo de convolución
Supongamos que tenemos una imagen de entrada de 5x5 y un filtro de 3x3 con stride 1 y sin padding.
import numpy as np # Imagen de entrada input_image = np.array([ [1, 2, 3, 0, 1], [4, 5, 6, 1, 2], [7, 8, 9, 2, 3], [0, 1, 2, 3, 4], [1, 2, 3, 4, 5] ]) # Filtro (kernel) filter = np.array([ [1, 0, -1], [1, 0, -1], [1, 0, -1] ]) # Realizar la convolución output = np.zeros((3, 3)) for i in range(3): for j in range(3): output[i, j] = np.sum(input_image[i:i+3, j:j+3] * filter) print(output)
1.4. Resultado de la convolución
La salida de la convolución es un mapa de características de 3x3:
- Capas de Pooling
2.1. ¿Qué es una capa de pooling?
Una capa de pooling reduce las dimensiones del mapa de características, resumiendo las características en regiones no superpuestas. Esto ayuda a reducir la cantidad de parámetros y el costo computacional, y también controla el sobreajuste.
2.2. Tipos de pooling
- Max Pooling: Toma el valor máximo en cada región.
- Average Pooling: Toma el valor promedio en cada región.
2.3. Ejemplo de max pooling
Supongamos que tenemos un mapa de características de 4x4 y aplicamos max pooling con un tamaño de ventana de 2x2 y stride 2.
# Mapa de características feature_map = np.array([ [1, 3, 2, 4], [5, 6, 1, 2], [7, 8, 3, 0], [2, 1, 4, 5] ]) # Realizar max pooling pooled_output = np.zeros((2, 2)) for i in range(2): for j in range(2): pooled_output[i, j] = np.max(feature_map[i*2:i*2+2, j*2:j*2+2]) print(pooled_output)
2.4. Resultado de max pooling
La salida del max pooling es un mapa de características de 2x2:
- Ejercicio Práctico
Ejercicio
Dada la siguiente imagen de entrada y filtro, realiza la convolución y luego aplica max pooling:
- Imagen de entrada (6x6):
[[1, 2, 3, 0, 1, 2], [4, 5, 6, 1, 2, 3], [7, 8, 9, 2, 3, 4], [0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7]]
- Filtro (3x3):
- Max pooling con tamaño de ventana 2x2 y stride 2.
Solución
# Imagen de entrada input_image = np.array([ [1, 2, 3, 0, 1, 2], [4, 5, 6, 1, 2, 3], [7, 8, 9, 2, 3, 4], [0, 1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7] ]) # Filtro (kernel) filter = np.array([ [1, 0, -1], [1, 0, -1], [1, 0, -1] ]) # Realizar la convolución conv_output = np.zeros((4, 4)) for i in range(4): for j in range(4): conv_output[i, j] = np.sum(input_image[i:i+3, j:j+3] * filter) print("Convolución:") print(conv_output) # Realizar max pooling pooled_output = np.zeros((2, 2)) for i in range(2): for j in range(2): pooled_output[i, j] = np.max(conv_output[i*2:i*2+2, j*2:j*2+2]) print("Max Pooling:") print(pooled_output)
Resultado
La salida de la convolución es:
La salida del max pooling es:
Conclusión
En esta sección, hemos aprendido sobre las capas convolucionales y de pooling, dos componentes esenciales de las Redes Neuronales Convolucionales. Las capas convolucionales permiten la extracción de características locales, mientras que las capas de pooling reducen la dimensionalidad y ayudan a controlar el sobreajuste. Con estos conceptos, estamos mejor preparados para entender y construir modelos de CNN más complejos. En el próximo tema, exploraremos arquitecturas populares de CNN y sus aplicaciones en el reconocimiento de imágenes.
Curso de Deep Learning
Módulo 1: Introducción a Deep Learning
- ¿Qué es Deep Learning?
- Historia y evolución del Deep Learning
- Aplicaciones de Deep Learning
- Conceptos básicos de redes neuronales
Módulo 2: Fundamentos de Redes Neuronales
- Perceptrón y Perceptrón Multicapa
- Función de activación
- Propagación hacia adelante y hacia atrás
- Optimización y función de pérdida
Módulo 3: Redes Neuronales Convolucionales (CNN)
- Introducción a las CNN
- Capas convolucionales y de pooling
- Arquitecturas populares de CNN
- Aplicaciones de CNN en reconocimiento de imágenes
Módulo 4: Redes Neuronales Recurrentes (RNN)
- Introducción a las RNN
- LSTM y GRU
- Aplicaciones de RNN en procesamiento del lenguaje natural
- Secuencias y series temporales
Módulo 5: Técnicas Avanzadas en Deep Learning
- Redes Generativas Adversariales (GAN)
- Autoencoders
- Transfer Learning
- Regularización y técnicas de mejora
Módulo 6: Herramientas y Frameworks
- Introducción a TensorFlow
- Introducción a PyTorch
- Comparación de frameworks
- Entornos de desarrollo y recursos adicionales
Módulo 7: Proyectos Prácticos
- Clasificación de imágenes con CNN
- Generación de texto con RNN
- Detección de anomalías con Autoencoders
- Creación de una GAN para generación de imágenes