File size: 1,687 Bytes
237774d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2a9e07e
 
 
 
237774d
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import torch
from safetensors.torch import load_model
from models import FromZero, PreTrained
from utils import multiclass_accuracy


def cargar_evaluar_modelo(archivo, tipo_modelo, num_clases, test_dataloader):
    try:
        if tipo_modelo == "tarea_7":
            modelo = PreTrained(num_clases)
        elif tipo_modelo == "tarea_8":
            modelo = FromZero(num_clases)

        load_model(modelo, archivo)
        modelo.eval()
        device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
        modelo.to(device)
        accuracy = 0

        with torch.no_grad():
            for imagenes, etiquetas in test_dataloader:
                imagenes = imagenes.to(device)
                etiquetas = etiquetas.to(device)
                predictions = modelo(imagenes)
                accuracy += multiclass_accuracy(predictions, etiquetas)

        accuracy = accuracy / len(test_dataloader)
        return accuracy
    except Exception as e:
        return f"Error: {str(e)}"


def evaluate_interface(model_file, model_type, num_clases, test_dataloader):
    if model_file is None:
        return "Por favor, carga un archivo .safetensor"

    # Verificamos que el archivo sea .safetensor
    if not model_file.name.endswith(".safetensor") or model_file.name.endswith(
        ".safetensors"
    ):
        return "Por favor, carga un archivo con extensión .safetensor o .safetensors"

    # Evaluamos el modelo
    accuracy = cargar_evaluar_modelo(
        model_file.name, model_type, num_clases, test_dataloader
    )

    if isinstance(accuracy, float):
        return f"Precisión del modelo: {accuracy*100:.2f}%"
    else:
        return accuracy