CNN desde cero para predecir la pCR en DCE-MRI de mama (BreastDCEDL)
Pesos del modelo final de mi trabajo de Aprendizaje Automático: una CNN 2D entrenada desde cero en PyTorch, sin modelos preentrenados, que estima la probabilidad de respuesta patológica completa (pCR) a partir de un corte de resonancia DCE previo al tratamiento (fases PRE, EARLY y LATE). Su salida se combina con tres variables clínicas mediante una regresión logística (fusión tardía).
Uso exclusivamente educativo. No es un dispositivo médico. No sirve para diagnosticar ni para decidir tratamientos.
- Código, informe y reproducción: https://github.com/AlvaroGlezFdez/caso_cancer_CNN
- Aplicación web: https://casocancercnn-wxbzjp2szt25nxqmidpwfy.streamlit.app/
Ficheros
| Fichero | Contenido |
|---|---|
modelo.pt |
state_dict de la CNN (98.049 parámetros, 392 KB) |
modelo.json |
Arquitectura, preprocesado, umbral, hiperparámetros, SHA-256 de modelo.pt y métricas agregadas de validación |
fusion.json |
Modelo combinado: variables, escalador (media y desviación de train), coeficientes, intercepto, umbrales y métricas de validación cruzada |
SHA-256 de modelo.pt: e86a36a9b9e7b28a1aa5e30e3121d74a5b185eff88b824011ce9d4e6a7cd6e1a
Modelo
- Entrada: 3 × 160 × 160. Las tres fases PNG de 256 × 256 (uint8) se apilan en el orden PRE, EARLY, LATE,
se dividen entre 255 y se recorta una ventana de 160 × 160 centrada en la caja del tumor, sin reescalar.
Sin normalización ImageNet. El preprocesado exacto está en
preprocesado.pydel repositorio. - Arquitectura: 4 bloques Conv 3×3 → BatchNorm → ReLU → MaxPool 2 (16, 32, 64 y 128 filtros), promedio global, Dropout 0,35 y Linear 128 → 1 (un logit).
- Entrenamiento: BCEWithLogitsLoss sin pos_weight; AdamW, lr 1e-3 con bajada lineal a 0, weight decay 1e-2, lote 32, 12 épocas fijas (la última, sin elegir época), 3 cortes al azar por paciente y época, semilla 42. Fold 0 de una validación cruzada de 5 folds por paciente (878 pacientes de entrenamiento).
- Fusión: regresión logística sobre el subtipo HR/HER2 (indicadores), log(1 + volumen tumoral), la edad y el logit de la CNN, ajustada con las probabilidades out-of-fold de los 5 folds y reajustada con todo train. Umbral: el de mayor sensibilidad con especificidad ≥ 0,85 en train (0,431 por paciente; 0,433 por corte).
Resultados
Test independiente de 176 pacientes (53 con pCR), evaluado una sola vez con el modelo congelado. AUC por paciente con IC95 por bootstrap:
| Modelo | Validación cruzada (train) | Test |
|---|---|---|
| Solo cohorte (referencia) | 0,523 | 0,543 (0,461–0,622) |
| Solo CNN | 0,545 | 0,572 (0,477–0,661) |
| Clínico | 0,686 | 0,674 (0,590–0,758) |
| Combinado | 0,691 | 0,679 (0,596–0,760) |
Con el umbral congelado, el combinado da en test: sensibilidad 0,283, especificidad 0,854, precisión 0,455 (15 VP, 38 FN, 18 FP, 105 VN). La imagen apenas añade información a las variables clínicas (combinado − clínico: +0,005, IC95 −0,021 a +0,029).
Limitaciones
- Test de las mismas cohortes que el entrenamiento (I-SPY1, I-SPY2, Duke); sin validación externa.
- El recorte necesita la caja del tumor. El modelo falla en Duke (AUC 0,515 con 9 pCR).
- Un único corte 2D, una sola semilla. Resultado retrospectivo: no demuestra utilidad clínica.
Datos y licencia
Entrenado con BreastDCEDL (Fridman et al., Scientific Data, 2026, doi:10.1038/s41597-026-06589-6), construido a partir de I-SPY1, I-SPY2 y Duke (The Cancer Imaging Archive), bajo CC BY-NC 4.0. Por eso los pesos se publican con la misma licencia (CC BY-NC 4.0): uso no comercial y con atribución.
Autor: Álvaro González Fernández, 2026.