Addestrare modelli multi-output
Quando addestri modelli con più output, è fondamentale assicurarti che la funzione di loss sia definita correttamente.
In questo caso, il modello produce due output: le predizioni per l’alfabeto e per il carattere. Per ciascuno di questi ci sono le corrispondenti etichette ground truth, che ti permetteranno di calcolare due loss separate: una dovuta a classificazioni errate dell’alfabeto e l’altra dovuta a classificazioni errate del carattere. Poiché in entrambi i casi si tratta di un problema di classificazione multi-classe, puoi applicare la Cross-Entropy ogni volta.
Tuttavia, la discesa del gradiente può ottimizzare una sola funzione di loss. Definirai quindi la loss totale come somma della loss per l’alfabeto e di quella per il carattere.
Questo esercizio fa parte del corso
Deep Learning intermedio con PyTorch
Istruzioni dell'esercizio
- Calcola la loss di classificazione dell’alfabeto e assegnala a
loss_alpha. - Calcola la loss di classificazione del carattere e assegnala a
loss_char. - Calcola la loss totale come somma delle due loss parziali e assegnala a
loss.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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()