Evaluación de modelos multisalida y ponderación de pérdidas

Aprendizaje profundo intermedio con PyTorch

Michal Oleszak

Machine Learning Engineer

Evaluación del modelo

acc_alpha = Accuracy(
    task="multiclass", num_classes=30
)
acc_char = Accuracy(
    task="multiclass", num_classes=964
)


net.eval() with torch.no_grad(): for images, labels_alpha, labels_char \ in dataloader_test: out_alpha, out_char = net(images)
_, pred_alpha = torch.max(out_alpha, 1) _, pred_char = torch.max(out_char, 1)
acc_alpha(pred_alpha, labels_alpha) acc_char(pred_char, labels_char)
  • Configurar métricas para cada salida
  • Repite el cargador de pruebas y obtén los resultados.
  • Calcular la predicción para cada salida.
  • Actualizar métricas de precisión
  • Calcular las puntuaciones de precisión finales
print(f"Alphabet: {acc_alpha.compute()}")
print(f"Character: {acc_char.compute()}")
Alphabet: 0.3166305720806122
Character: 0.24064336717128754
Aprendizaje profundo intermedio con PyTorch

Revisión del bucle de entrenamiento con múltiples salidas

for epoch in range(10):
    for images, labels_alpha, labels_char \
    in dataloader_train:
        optimizer.zero_grad()
        outputs_alpha, outputs_char = net(images)
        loss_alpha = criterion(
          outputs_alpha, labels_alpha
        )
        loss_char = criterion(
          outputs_char, labels_char
        )
        loss = loss_alpha + loss_char
        loss.backward()
        optimizer.step()
  • Dos pérdidas: para el alfabeto y los caracteres
  • Pérdida final definida como la suma de las pérdidas de letras y caracteres: loss = loss_alpha + loss_char
  • Ambas tareas de clasificación se consideran igualmente importantes.
Aprendizaje profundo intermedio con PyTorch

Importancia variable de las tareas

La clasificación de caracteres es dos veces más importante que la clasificación alfabética.

  • Enfoque 1: Escala las pérdidas más importantes por un factor de 2.

    loss = loss_alpha + loss_char * 2
    
  • Enfoque 2: Asigna pesos que sumen 1.

    loss = 0.33 * loss_alpha + 0.67 * loss_char
    
Aprendizaje profundo intermedio con PyTorch

Advertencia: pérdidas a diferentes escalas

  • Las pérdidas deben ser de la misma magnitud antes de ponderarlas y sumarlas.
  • Ejemplos de tareas:

    • Predecir el precio de la vivienda -> Pérdida MSE
    • Predice la calidad: baja, media, alta -> Pérdida de entropía cruzada
  • La entropía cruzada suele ser de un solo dígito.

  • La pérdida de MSE puede alcanzar decenas de miles.
  • El modelo ignoraría la tarea de evaluación de la calidad.
  • Solución: Normaliza ambas pérdidas antes de ponderarlas y sumarlas.
    loss_price = loss_price / torch.max(loss_price)
    loss_quality = loss_quality / torch.max(loss_quality)
    loss = 0.7 * loss_price + 0.3 * loss_quality
    
Aprendizaje profundo intermedio con PyTorch

¡Vamos a practicar!

Aprendizaje profundo intermedio con PyTorch

Preparing Video For Download...