訓練多輸出模型
在訓練具有多個輸出的模型時,關鍵是要正確定義損失函式。
在這個情境中,模型會產生兩個輸出:字母表的預測與字元的預測。對應到每個輸出,都有其真實標籤(ground truth),讓你能分別計算兩個損失:一個來自字母表分類錯誤,另一個來自字元分類錯誤。由於這兩者都是多類別分類任務,每次都可以使用 Cross-Entropy 損失。
然而,梯度下降一次只能最佳化一個損失函式。因此,你將把總損失定義為字母表損失與字元損失的總和。
本練習屬於課程
Intermediate Deep Learning with PyTorch
練習說明
- 計算字母表分類損失,指定給
loss_alpha。 - 計算字元分類損失,指定給
loss_char。 - 計算總損失為兩個部分損失的總和,指定給
loss。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
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()