Views
No views yet
brain_glioma)brain_menin)brain_tumor)SimpleCNN) con cuatro capas convolucionales (32, 64, 128, 256 filtros respectivamente), cada una seguida de una capa de activación ReLU y una capa de max-pooling. Después de las capas convolucionales, la salida se aplana y se pasa a través de dos capas completamente conectadas (512 neuronas en la primera) para la clasificación final en 3 clases.evaluar_dataset.ipynb, que contiene el código utilizado para evaluar el modelo, generar la matriz de confusión y calcular las métricas de rendimiento.data/.torch_brain_cancer_91.pth) y usar el siguiente script.1import torch
2from torchvision import transforms
3from PIL import Image
4
5# 1. Cargar el modelo
6# Asegúrate de que la ruta al archivo .pth sea correcta
7model = torch.load('modelo/torch_brain_cancer_91.pth')
8model.eval()
9
10# 2. Definir las transformaciones de la imagen
11# ¡IMPORTANTE! Usa las mismas transformaciones que usaste para la validación/test.
12# Rellena los valores correctos de reescalado y normalización.
13preprocess = transforms.Compose([
14 transforms.Resize(256),
15 transforms.CenterCrop(224),
16 transforms.ToTensor(),
17 transforms.Normalize(
18 mean=[0.485, 0.456, 0.406], # [DATO A RELLENAR: si usaste valores diferentes]
19 std=[0.229, 0.224, 0.225] # [DATO A RELLENAR: si usaste valores diferentes]
20 )
21])
22
23# 3. Cargar y preprocesar la imagen
24img = Image.open("[RUTA/A/TU/IMAGEN.jpg]").convert('RGB')
25img_preprocessed = preprocess(img)
26batch_img_tensor = torch.unsqueeze(img_preprocessed, 0)
27
28# 4. Realizar la predicción
29with torch.no_grad():
30 output = model(batch_img_tensor)
31
32# 5. Obtener la clase predicha
33class_names = ['brain_glioma', 'brain_menin', 'brain_tumor']
34_, index = torch.max(output, 1)
35predicted_class = class_names[index[0]]
36print(f"La clase predicha es: {predicted_class}")
37transformaciones_train):RandomResizedCrop(224): Recorte aleatorio y redimensionamiento a 224x224 píxeles.RandomHorizontalFlip(): Volteo horizontal aleatorio.RandomRotation(15): Rotación aleatoria de hasta 15 grados.ToTensor(): Conversión de las imágenes a tensores PyTorch.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): Normalización con los valores medios y desviación estándar de ImageNet.transformaciones_test):Resize(256): Redimensionamiento de la imagen a 256 píxeles en el lado más corto.CenterCrop(224): Recorte central a 224x224 píxeles.ToTensor(): Conversión de las imágenes a tensores PyTorch.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]): Normalización con los valores medios y desviación estándar de ImageNet.ImageFolder y se cargaron con DataLoader con un batch_size de 32.Reporte de Clasificación:
precision recall f1-score support
brain_glioma 0.95 0.95 0.95 300
brain_menin 0.84 0.91 0.87 300
brain_tumor 0.94 0.86 0.90 307
accuracy 0.91 907
macro avg 0.91 0.91 0.91 907
weighted avg 0.91 0.91 0.91 907| brain_glioma | brain_menin | brain_tumor | |
|---|---|---|---|
| brain_glioma | 285 | 15 | 0 |
| brain_menin | 9 | 273 | 18 |
| brain_tumor | 6 | 37 | 264 |
brain_glioma con una alta precisión y pocos errores. La principal área de mejora se encuentra en la distinción entre las clases brain_menin y brain_tumor. Hay un número notable de falsos negativos y falsos positivos entre estas dos categorías, lo que indica que el modelo a veces confunde estos dos tipos de tumores entre sí. Por ejemplo, 37 casos de brain_tumor fueron clasificados erróneamente como brain_menin, y 18 casos de brain_menin fueron clasificados como brain_tumor.