No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Función para evaluación

17/24
Recursos

Aportes 2

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Creo que es importante hacer notar la diferencia entre with torch.no_grad() y with torch.inference_mode() ya que lo usamos en el notebook anterior.

  • torch.no_grad(): desactiva el cálculo de gradientes para reducir el uso de memoria y acelerar la evaluación de la red neuronal.
  • torch.inference_mode(): es una función que se utiliza para optimizar la inferencia en tiempo real en dispositivos móviles y otros dispositivos con recursos limitados. En lugar de desactivar el cálculo de gradientes, “with torch.inference_mode()” desactiva las operaciones que no son necesarias para la inferencia y optimiza las operaciones restantes para mejorar el rendimiento.
Aquí tienes una función de evaluación para un modelo de clasificación de texto en PyTorch. Esta función evalúa el modelo en un conjunto de datos de prueba, calcula la pérdida y precisión, y puede ser usada al final del entrenamiento o para evaluar el rendimiento del modelo en un conjunto de validación o prueba. \### Función de Evaluación ```python import torch def evaluate\_model(model, data\_loader, criterion, device): model.eval() # Poner el modelo en modo evaluación running\_loss = 0.0 correct\_predictions = 0 total\_samples = 0 with torch.no\_grad(): # Desactiva el cálculo de gradientes for inputs, labels in data\_loader: inputs, labels = inputs.to(device), labels.to(device) \# Forward pass outputs = model(inputs) loss = criterion(outputs, labels) \# Acumular la pérdida y calcular predicciones correctas running\_loss += loss.item() \* inputs.size(0) \_, predicted = torch.max(outputs, 1) correct\_predictions += (predicted == labels).sum().item() total\_samples += labels.size(0) avg\_loss = running\_loss / total\_samples accuracy = correct\_predictions / total\_samples print(f"Evaluation Loss: {avg\_loss:.4f}, Accuracy: {accuracy:.4f}") return avg\_loss, accuracy ``` \### Descripción de los componentes: 1\. \*\*`model.eval()`\*\*: Pone el modelo en modo de evaluación, lo que desactiva comportamientos como el dropout. 2\. \*\*`torch.no\_grad()`\*\*: Desactiva el cálculo de gradientes, lo que reduce el consumo de memoria y acelera la evaluación. 3\. \*\*`outputs`\*\*: Salida del modelo después de pasar los datos de entrada (inputs). 4\. \*\*`loss`\*\*: Calcula la pérdida utilizando la función de pérdida (`criterion`), como `nn.CrossEntropyLoss`. 5\. \*\*`torch.max(outputs, 1)`\*\*: Obtiene las predicciones del modelo seleccionando la clase con la mayor probabilidad. 6\. \*\*`correct\_predictions`\*\*: Suma cuántas predicciones son correctas comparadas con las etiquetas verdaderas. \### Ejemplo de uso: ```python \# Inicializar el modelo y la función de pérdida model = MyTextClassifierModel() # Reemplaza con tu modelo criterion = nn.CrossEntropyLoss() \# Llamar a la función de evaluación evaluate\_model(model, test\_loader, criterion, device="cuda") ``` Esta función es útil para evaluar el rendimiento del modelo después de su entrenamiento, y proporciona la pérdida promedio y la precisión en el conjunto de evaluación. Puedes utilizarla tanto para validación durante el entrenamiento como para probar el modelo final.