Una CNN en animaciones: perros y gatos
Cuaderno de Jupyter docente, en español, que abre una red neuronal convolucional (CNN) por dentro y la explica con animaciones, siguiendo a una sola foto de un perro de principio a fin.
🌐 Versión web para clase (sin instalar nada): huggingface.co/spaces/OncomIA01/cnn-perros-gatos-clase
Esto no es un modelo entrenado para usar: es material de clase. La red se construye y se entrena dentro del propio cuaderno, en menos de un minuto en CPU.
Qué se ve
| Parte | Animación |
|---|---|
| 1. Los datos | la foto que seguimos y las 400 fotos de la clase |
| 2. La arquitectura | la red construyéndose bloque a bloque |
| 3. Qué es una convolución | una ventana 3×3 que multiplica y suma |
| 4. Un perro, muchos filtros | el filtro se transforma y cambia lo que resalta (bordes, difuminar, realzar…) |
| 5. El pooling | MaxPool frente a AvgPool sobre la foto, de 64 a 4 píxeles; tolerancia a desplazamientos |
| 6. Entrenar | 20 épocas guardando filtros y mapas en cada una |
| 7. Mapas de características | cómo aprende la red sus filtros y mapas, época a época |
| 8. La foto atraviesa la red | dentro de un bloque; los 4 bloques; promedio global, Flatten, Dropout, Linear y sigmoide con los números reales; la red entera en una simulación |
| 9. ¿Acierta? | matriz de confusión y 16 fotos nuevas |
Cómo usarlo
- Descarga
CNN_resumen_perros_gatos_autonomo.ipynb: no necesitas nada más. - Ábrelo en Jupyter, VS Code o Google Colab (en Colab: Archivo → Subir cuaderno).
- Ejecuta las celdas en orden (o Ejecutar todo). En las animaciones, pulsa ▶ o avanza fotograma a fotograma.
La sección 0 crea junto al cuaderno los ficheros de código que usa
(modelo.py, animaciones.py, datos_perros_gatos.py…). La primera vez
descarga 400 fotos (unos 10 MB), así que hace falta internet; después
funciona sin conexión.
Requisitos: Python 3.10+ con numpy, pandas, matplotlib, pillow,
scikit-learn, requests y torch. En Google Colab ya están instalados.
La red y el resultado
CNNMama: 4 bloques Conv 3×3 → BatchNorm → ReLU → MaxPool (16, 32, 64 y 128
filtros), promedio global, Dropout(0,3) y Linear(128 → 1). 97.809 pesos.
Entrenada con 300 fotos de 64×64 durante 20 épocas (AdamW, lr = 5·10⁻⁴, volteo horizontal), acierta alrededor del 75 % en 100 fotos que no ha visto. Con tan pocas fotos de prueba, ±5 puntos son ruido normal. El resultado es reproducible con la semilla fija en la misma máquina.
Datos
Las fotos no están en este repositorio: el cuaderno las descarga del dataset público microsoft/cats_vs_dogs. Se usa una selección docente fija de 400 imágenes (200 gatos y 200 perros), no una muestra aleatoria del corpus ni un benchmark. Consulta las condiciones de uso de ese dataset.
Uso previsto
Material para enseñar cómo funciona una CNN (convolución, filtros, pooling, mapas de características, Flatten, entrenamiento). No es un clasificador para usar en producción.