Multi-outputmodellen trainen
Bij het trainen van modellen met meerdere outputs is het cruciaal om de verliesfunctie correct te definiëren.
In dit geval produceert het model twee outputs: voorspellingen voor het alfabet en voor het teken. Voor elk daarvan zijn er bijbehorende ground-truthlabels, waarmee je twee afzonderlijke verliezen kunt berekenen: één door foute alfabetclassificaties en één door foute tekenclassificatie. Omdat het in beide gevallen om een multi-labelclassificatie gaat, kun je telkens de Cross-Entropy-verliesfunctie toepassen.
Gradient descent kan echter maar één verliesfunctie optimaliseren. Daarom definieer je het totale verlies als de som van het alfabet- en tekenverlies.
Deze oefening maakt deel uit van de cursus
Gevorderde Deep Learning met PyTorch
Oefeninstructies
- Bereken het verlies voor de alfabetclassificatie en wijs dit toe aan
loss_alpha. - Bereken het verlies voor de tekenclassificatie en wijs dit toe aan
loss_char. - Bereken het totale verlies als de som van de twee deelverliezen en wijs dit toe aan
loss.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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()