Neural Network Training Labs
Laboratorio 03 · Central · 4 / 31

🖼️ CNN para visión

CNN para visión

Objetivo

Entrenar una CNN y analizar errores sobre fotografías reales de diez clases.

Dataset real

CIFAR-10 contiene 60.000 imágenes reales de 32×32.

Fundamento matemático

Convolución, pooling, normalización y clasificación.

Protocolo experimental

  1. Descargar y verificar la procedencia.
  2. Conservar o crear una partición reproducible.
  3. Ajustar transformaciones únicamente con train.
  4. Seleccionar modelo e hiperparámetros usando validation.
  5. Evaluar test una sola vez tras congelar la decisión.
  6. Comparar con la línea base: Clasificador lineal sobre píxeles.
  7. Guardar configuración, entorno, métricas, predicciones, gráficos y modelo.

Ejecución

python labs/03_cnn_vision/train.py --quick
python labs/03_cnn_vision/train.py --config improved

Preparar únicamente el dataset:

python -m neural_labs.cli dataset --lab 03_cnn_vision

Inferencia y exportación:

neural-labs predict --lab 03_cnn_vision --run latest --input sample.json
neural-labs export --lab 03_cnn_vision --run latest --format onnx --verify

Métricas

accuracy, balanced_accuracy, macro_precision, macro_recall, macro_f1.

Archivos

Ejercicios

Material formativo v3

Comandos profesionales

neural-labs quality --lab 03_cnn_vision --quick
neural-labs benchmark --lab 03_cnn_vision --quick --split-seed 42 --training-seeds 41 42 43
neural-labs leaderboard

Sellado del experimento

La partición se controla con split_seed; la inicialización y el entrenamiento con training_seed. El conjunto test se abre solamente después de seleccionar el checkpoint mediante validación y escribir experiment.lock.json.

🧠 Teoría

Teoría — CNN para visión

Propósito

Entrenar una CNN y analizar errores sobre fotografías reales de diez clases.

Idea central

Este laboratorio estudia convoluciones para patrones espaciales usando cifar10, un dataset público real procedente de Torchvision / University of Toronto.

Aplanar una imagen de 32×32×3 y pasarla por un MLP funciona, pero desperdicia la estructura del problema: ignora que los píxeles vecinos están correlacionados y que un objeto es el mismo aunque se desplace unos píxeles. La red convolucional (CNN) incorpora dos sesgos inductivos que encajan con las imágenes: localidad (cada neurona mira solo una región pequeña) e invariancia por traslación (el mismo filtro se aplica en toda la imagen, compartiendo parámetros). Esto reduce drásticamente el número de pesos y obliga al modelo a aprender detectores de patrones reutilizables.

La consecuencia es una jerarquía de representaciones: las primeras capas aprenden bordes y colores, las intermedias combinan esos bordes en texturas y partes, y las profundas responden a objetos completos. El laboratorio entrena esta jerarquía sobre CIFAR-10 (60.000 fotografías reales de 10 clases) y contrasta contra un clasificador lineal sobre píxeles para hacer patente cuánto aporta explotar la estructura espacial.

Fundamento matemático

La operación central es la convolución: un filtro (kernel) de pesos K de tamaño pequeño se desliza sobre la imagen de entrada X y, en cada posición, calcula un producto punto local. Para un filtro de tamaño F×F sobre un mapa de entrada:

Y(i, j) = Σₘ Σₙ X(i+m, j+n)·K(m, n) + b

El mismo K se reutiliza en todas las posiciones (i, j): eso es el peso compartido que da la invariancia por traslación y reduce los parámetros de millones (como en una capa densa) a apenas F×F por canal de filtro. Cada filtro produce un mapa de activación que señala dónde aparece el patrón que ese filtro detecta. Tras la convolución se aplica una no linealidad (ReLU), sin la cual toda la pila colapsaría a una única convolución lineal.

El tamaño del mapa de salida depende del stride s (paso del deslizamiento) y del padding p (relleno de bordes): dimensión_salida = ⌊(dimensión_entrada − F + 2p)/s⌋ + 1. El pooling (típicamente max-pooling) submuestrea cada región tomando su máximo, lo que reduce la resolución espacial, aporta cierta invariancia a pequeñas traslaciones y amplía el campo receptivo de las capas posteriores sin añadir parámetros.

Un ingrediente decisivo para entrenar redes profundas es la normalización por lotes (batch normalization), que estandariza las activaciones de cada canal dentro del minilote:

x̂ = (x − μ_B) / √(σ²_B + ε), y = γ·x̂ + β

donde μ_B y σ²_B son la media y varianza del lote, ε evita la división por cero, y γ, β son parámetros aprendibles que restauran la capacidad expresiva. Esto estabiliza y acelera el entrenamiento al mantener las activaciones en un rango controlado, reduciendo la sensibilidad a la inicialización.

Tras varias etapas de convolución + ReLU + pooling, los mapas finales se aplanan (o se promedian con global average pooling) y pasan a una cabeza densa que produce los 10 logits, entrenados con entropía cruzada categórica y softmax igual que en el MLP. Una idea arquitectónica que el laboratorio deja como horizonte es la conexión residual (ResNet): sumar la entrada de un bloque a su salida, y = F(x) + x, lo que crea un atajo por el que el gradiente fluye sin atenuarse y permite entrenar redes de cientos de capas.

La formulación debe conectarse con cuatro elementos: representación de entrada, función del modelo, función de pérdida y regla de actualización. El notebook muestra las dimensiones de los tensores y conserva la misma implementación que el script de terminal.

Protocolo científico

Riesgos de interpretación

CIFAR-10 contiene 60.000 imágenes reales de 32×32.

El dataset refleja su proceso de recolección y no representa automáticamente otros períodos, países o poblaciones. Una asociación predictiva no demuestra causalidad.

Pregunta crítica

¿Qué clases concentran errores visualmente plausibles?

🔗 Referencias

Las referencias apuntan a las obras; no se reproduce su contenido, la redacción es original.

🔬 Experimentos

Plan de experimentos — CNN para visión

Hipótesis principal

Entrenar una CNN y analizar errores sobre fotografías reales de diez clases. La hipótesis debe aceptarse o rechazarse comparando el modelo con Clasificador lineal sobre píxeles y no solo observando que la pérdida disminuye.

Experimento mínimo

  1. Ejecutar baseline.yaml con tres semillas.
  2. Ejecutar improved.yaml con las mismas semillas.
  3. Mantener fija la partición de datos dentro de cada semilla.
  4. Elegir la variante con validation.
  5. Comparar la variante elegida contra la línea base en test.
  6. Revisar intervalos de confianza, errores y costo computacional.

Experimento específico

Comparar kernel, normalización y aumento.

Variables controladas

Tabla que debe completarse

Variante Semilla Métrica validation Métrica test Tiempo Parámetros Observación
baseline 41
baseline 42
baseline 43
improved 41
improved 42
improved 43

Criterio de conclusión

La conclusión debe declarar magnitud de la mejora, incertidumbre, costo adicional, errores relevantes y condiciones bajo las cuales el resultado podría no repetirse.

📝 Evaluación

Evaluación — CNN para visión

Evidencias obligatorias

Preguntas

  1. Explique con sus palabras: Convolución, pooling, normalización y clasificación.
  2. ¿Qué información del dataset solo puede utilizarse durante entrenamiento?
  3. ¿Por qué la línea base Clasificador lineal sobre píxeles es una comparación razonable?
  4. ¿Qué clases concentran errores visualmente plausibles?
  5. ¿Qué cambiaría antes de usar este modelo fuera del laboratorio?

Rúbrica

Criterio Insuficiente Adecuado Excelente Peso
Integridad de datos mezcla particiones separación correcta auditoría, hashes y justificación 20%
Implementación no ejecuta entrena y evalúa código claro, reusable y probado 20%
Diseño experimental resultado aislado comparación controlada multi-semilla e incertidumbre 20%
Análisis repite métricas interpreta errores identifica sesgos, límites y costo 25%
Comunicación incompleta reporte entendible model card y conclusiones verificables 15%

La aprobación exige al menos 70% y cero errores críticos de fuga de datos.