開始使用免費開始

鑑別器損失

現在該來定義鑑別器的損失了。回想一下,鑑別器的工作是將影像分類為真或假。因此,當它把產生器的輸出判成真(標籤 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
編輯並執行程式碼