Zacznij terazZacznij za darmo

Trenowanie modeli wielowyjściowych

Podczas trenowania modeli z wieloma wyjściami niezwykle ważne jest poprawne zdefiniowanie funkcji straty.

W tym przypadku model produkuje dwa wyjścia: predykcje alfabetu oraz znaku. Dla każdego z nich istnieją odpowiednie etykiety prawdziwych wartości, które pozwalają obliczyć dwie oddzielne straty: jedną wynikającą z błędnej klasyfikacji alfabetu, a drugą – z błędnej klasyfikacji znaku. Ponieważ w obu przypadkach mamy do czynienia z zadaniem klasyfikacji wieloetykietowej, za każdym razem można zastosować stratę entropii krzyżowej.

Gradient descent może jednak optymalizować tylko jedną funkcję straty. Dlatego całkowitą stratę zdefiniujesz jako sumę straty alfabetu i straty znaku.

To ćwiczenie jest częścią kursu

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Zobacz kurs

Instrukcje do ćwiczenia

  • Oblicz stratę klasyfikacji alfabetu i przypisz ją do loss_alpha.
  • Oblicz stratę klasyfikacji znaku i przypisz ją do loss_char.
  • Oblicz całkowitą stratę jako sumę dwóch składowych strat i przypisz ją do loss.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.05)

for epoch in range(1):
    for images, labels_alpha, labels_char in dataloader_train:
        optimizer.zero_grad()
        outputs_alpha, outputs_char = net(images)
        # Compute alphabet classification loss
        loss_alpha = ____
        # Compute character classification loss
        loss_char = ____
        # Compute total loss
        loss = ____
        loss.backward()
        optimizer.step()
Edytuj i uruchom kod