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
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()