Machine Learning clásico
Características diseñadas a mano (color, bordes, umbrales) y un modelo sencillo encima. En este proyecto es el detector por umbral de pulpa, que acertó solo el 50 %.
Electiva III – Deep Learning · Ingeniería de Sistemas · Universidad Cooperativa de Colombia
Una red neuronal convolucional que clasifica la foto de una manzana como fresca o dañada. Esta página reúne las cuatro entregas del curso: la teoría, los elementos del Deep Learning, el código y el proyecto funcionando.
Entrega 1 · Mapa conceptual
El Deep Learning es un subconjunto del Machine Learning que aprende representaciones de los datos mediante redes neuronales con muchas capas. A diferencia del ML clásico, no necesita que una persona diseñe las características a mano: la red las aprende durante el entrenamiento.
Características diseñadas a mano (color, bordes, umbrales) y un modelo sencillo encima. En este proyecto es el detector por umbral de pulpa, que acertó solo el 50 %.
La red aprende de los píxeles: bordes en las primeras capas, texturas y formas después, y conceptos como «mancha» o «mordisco» en las últimas.
Deep Learning
├── Fundamentos ......... neurona · MLP · funciones de activación · backpropagation · optimizadores
├── Arquitecturas ....... CNN (imágenes) · RNN/LSTM (secuencias) · Transformers · GANs
├── Entrenamiento ....... pérdida · gradiente · épocas · lotes · regularización · hiperparámetros
├── Reutilización ....... transfer learning · fine-tuning · modelos preentrenados
├── Despliegue .......... Edge AI · ONNX / TensorFlow Lite · APIs · monitoreo
└── Responsabilidad ..... sesgo en los datos · interpretabilidad (Grad-CAM, SHAP, LIME) · privacidad
Entrega 2 · Programa que explica los elementos
Una neurona calcula una suma ponderada de sus entradas y le aplica una función de activación. Una MLP apila capas densas. Aplanar una imagen de 100×100×3 da 30 000 entradas y 3,8 millones de parámetros: caro y sin noción de vecindad.
ReLU en las capas ocultas (rápida, evita gradientes que se apagan) y softmax en la salida para obtener la probabilidad de cada clase.
La pérdida (entropía cruzada) mide el error; la retropropagación calcula el gradiente de cada peso; Adam los ajusta paso a paso.
Un filtro 3×3 se desliza por la imagen y detecta un patrón con los mismos pesos en todas partes. El pooling reduce el tamaño y el padding controla los bordes. Una CNN de 876 mil parámetros iguala a una MLP de 3,8 millones.
Con pocos datos la red memoriza. Se combate con Dropout, aumento de datos, BatchNorm y Early Stopping sobre la pérdida de validación.
Se parte de MobileNetV2, ya entrenada con ImageNet, y solo se ajusta la parte final para distinguir manzanas frescas y dañadas. Menos datos, menos tiempo y mejor generalización.
El primer modelo del proyecto aprendió de qué fuente venía la foto y no el daño de la fruta. Se detectó con una imagen externa y se corrige con datos variados y Grad-CAM.
El modelo se exporta a ONNX y corre dentro de esta página con ONNX Runtime Web: la foto no sale de tu navegador.
Entrega 3 · Programa que codifica los elementos
Todo el código está en el repositorio.
| Archivo | Qué contiene |
|---|---|
notebooks/00_avance_clases_cnn_mordida.py | Avance de las primeras clases: convolución manual, MLP vs CNN, curvas, activaciones. |
notebooks/01_transfer_learning_manzanas.ipynb | Datos, partición, aumento, MobileNetV2 en PyTorch, fine-tuning, métricas y Grad-CAM. |
src/ | Módulos de PyTorch: datos, modelo, entrenamiento, evaluación, Grad-CAM y exportación a ONNX. |
m = models.mobilenet_v2(weights=models.MobileNet_V2_Weights.IMAGENET1K_V1)
m.classifier = nn.Sequential(nn.Dropout(0.3), nn.Linear(m.last_channel, 1)) # logit de «dañada»
for p in m.features.parameters():
p.requires_grad = False # fase 1: solo se entrena la cabeza
opt = torch.optim.Adam(m.classifier.parameters(), lr=1e-3)
perdida = nn.BCEWithLogitsLoss()
Entrega 4 · Implementación del paradigma Deep Learning
fresca (0) o dañada (1).Sube o toma la foto de una manzana. El análisis se hace en tu navegador y la imagen no se envía a ningún servidor.
Aún no se ha publicado el modelo entrenado. Cuando el archivo model/manzanas.onnx esté en el repositorio, la demo se activará sola.
Esta sección se completa tras el entrenamiento final. Resultados del avance de clases, con las limitaciones ya identificadas:
| Clasificador | Exactitud en prueba | Parámetros | Lectura |
|---|---|---|---|
| Detector por umbral (sin aprendizaje) | 50 % | 0 | Equivale a lanzar una moneda. |
| MLP | 100 % | 3 840 386 | Prueba de solo 10 imágenes: no concluyente. |
| CNN propia | 100 % | 875 906 | Falló con una foto externa: aprendió la fuente de la foto. |
| MobileNetV2 (transfer learning) | Pendiente de entrenamiento. | ||