19 · Arquitectura CNN completa: Conv → BN → ReLU → Pool
Ensambla los bloques en un clasificador de imágenes completo: etapas Conv–BN–ReLU–Pool alternadas, creciendo canales, reduciendo dimensiones espaciales, terminando en una cabeza clasificadora lineal.
Una CNN moderna es una alternancia de bloques Conv → BN → ReLU → Pool, reduciendo gradualmente el tamaño espacial mientras crece en canales, terminando en una cabeza clasificadora.
Sin esto:
Sin el modelo mental de arquitectura, el código de AlexNet/VGG/ResNet parece arbitrario.
Ahora tienes cada bloque de construcción: convolución, ReLU, normalización por lote, max pooling. Una arquitectura CNN completa es estos bloques dispuestos en un patrón deliberado:
- Conv → BN → ReLU (bloque de extracción de características) — el componente principal repetido muchas veces.
- MaxPool (o conv con stride) — submuestreo espacial periódico, típicamente 2× a la vez.
- A medida que las dimensiones espaciales se reducen, el número de canales crece — más características abstractas por ubicación.
- Global Average Pooling — colapsa las dimensiones espaciales a 1×1, produciendo un vector de características de tamaño fijo.
- Capa Linear — mapea el vector de características a logits de clase.
La intuición para crecer en canales mientras el espacio se reduce: las capas tempranas detectan patrones simples y locales (bordes, colores). Las capas posteriores detectan patrones complejos y globales (texturas, partes de objetos, objetos completos). Una única posición en el mapa de características de una capa tardía "ve" una gran región de la imagen original, por lo que necesita más canales para codificar el contenido más rico que está resumiendo.
Este patrón fue descubierto empíricamente. Los hitos:
- LeNet (1989/1998) — primera CNN práctica en dígitos escritos a mano.
- AlexNet (2012) — primera CNN profunda entrenada en GPU; ganó ImageNet por un margen enorme; introdujo ReLU, dropout, aumento de datos a escala.
- VGG (2014) — mostró que la profundidad (16-19 capas) con kernels uniformes 3×3 supera a los kernels más grandes.
- GoogLeNet/Inception (2014) — convoluciones multi-escala en paralelo ("módulo inception").
- ResNet (2015) — las conexiones residuales permiten que los gradientes fluyan a través de 100+ capas; desbloqueó la profundidad moderna.
- EfficientNet (2019) — escalado compuesto de profundidad, anchura y resolución conjuntamente.
Diagrama de arquitectura CNN clásica: bloques Conv→BN→ReLU→Pool, canales crecientes, dimensiones espaciales decrecientes
Recorrido de conteo de parámetros — la CNN tiene ~95k params frente a ~820k para un MLP equivalente
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Read-along de PyTorch: clase SimpleCNN completa — Conv/BN/ReLU/Pool/GAP/Linear
Evolución de las arquitecturas CNN: LeNet → AlexNet → VGG → Inception → ResNet → EfficientNet
¿Por qué las capas CNN posteriores tienen típicamente MÁS canales pero MENORES dimensiones espaciales?
- Bloque CNN estándar: Conv(padding same) → BatchNorm → ReLU → (MaxPool cada N bloques). Los canales crecen (3→32→64→128→...); las dimensiones espaciales se reducen (224→112→56→...).
- Evolución de arquitecturas CNN: LeNet (1998) → AlexNet (2012, ReLU+GPU) → VGG (2014, 3×3 en todas partes) → ResNet (2015, conexiones residuales) → EfficientNet (2019, escalado compuesto).
- Global Average Pooling → vector de tamaño fijo habilita el aprendizaje por transferencia: backbone preentrenado + nueva cabeza Linear para cualquier tarea de clasificación.
- Siempre imprime x.shape después de cada bloque CNN al construir — los bugs de forma son silenciosos y comunes, especialmente en el límite conv→linear.
ResNet, EfficientNet, MobileNet — cada CNN que usarás como backbone sigue este patrón 'bloque Conv → submuestrear → crecer canales'. Conocer esto te permite leer el diagrama de arquitectura de cualquier artículo de un vistazo.
Si lo quitas: Mirarías una definición de ResNet (3 líneas de bloques) y no tendrías idea de qué bloques extraen características, cuáles submuestrean, y por qué hay 4 etapas con conteos de canales duplicados. Cada backbone parecería una secuencia arbitraria de números.