鑑別器損失
現在該來定義鑑別器的損失了。回想一下,鑑別器的工作是將影像分類為真或假。因此,當它把產生器的輸出判成真(標籤 1)或把真實影像判成假(標籤 0)時,就會產生損失。
定義可計算鑑別器損失的 disc_loss() 函式。它有五個參數:
gen:產生器模型disc:鑑別器模型real:來自訓練資料的真實影像樣本num_images:批次中的影像數量z_dim:輸入隨機雜訊的維度大小
本練習屬於課程
使用 PyTorch 進行影像深度學習
練習說明
- 使用鑑別器對
fake影像進行分類,並將預測指定給disc_pred_fake。 - 透過對鑑別器對假影像的預測與相同形狀的全 0 張量呼叫
criterion,計算假樣本的損失組成。 - 使用鑑別器對
real影像進行分類,並將預測指定給disc_pred_real。 - 透過對鑑別器對真實影像的預測與相同形狀的全 1 張量呼叫
criterion,計算真樣本的損失組成。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
def disc_loss(gen, disc, real, num_images, z_dim):
criterion = nn.BCEWithLogitsLoss()
noise = torch.randn(num_images, z_dim)
fake = gen(noise)
# Get discriminator's predictions for fake images
disc_pred_fake = ____
# Calculate the fake loss component
fake_loss = ____
# Get discriminator's predictions for real images
disc_pred_real = ____
# Calculate the real loss component
real_loss = ____
disc_loss = (real_loss + fake_loss) / 2
return disc_loss