開始使用免費開始

訓練迴圈

終於,你先前在模型架構與損失函式上投入的心力要開花結果了:是時候開始訓練!你的任務是實作並執行 GAN 的訓練迴圈。注意:為了避免執行時間過長,在第一個資料批次後放置了 break 陳述式。

兩個最佳化器 disc_optgen_opt 已經初始化為 Adam()。你先前定義用來計算損失的函式 gen_loss()disc_loss() 也已可直接使用。同時也為你準備好了 dataloader

回顧一下:

  • disc_loss() 的引數為:gendiscrealcur_batch_sizez_dim
  • gen_loss() 的引數為:gendisccur_batch_sizez_dim

本練習屬於課程

使用 PyTorch 進行影像深度學習

檢視課程

練習說明

  • 使用 disc_loss() 計算鑑別器損失,依序傳入產生器、鑑別器、真實影像樣本、目前批次大小,以及雜訊大小 16,並將結果指定給 d_loss
  • 使用 d_loss 計算梯度。
  • 使用 gen_loss() 計算產生器損失,依序傳入產生器、鑑別器、目前批次大小,以及雜訊大小 16,並將結果指定給 g_loss
  • 使用 g_loss 計算梯度。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

for epoch in range(1):
    for real in dataloader:
        cur_batch_size = len(real)
        
        disc_opt.zero_grad()
        # Calculate discriminator loss
        d_loss = ____
        # Compute gradients
        ____
        disc_opt.step()

        gen_opt.zero_grad()
        # Calculate generator loss
        g_loss = ____
        # Compute generator gradients
        ____
        gen_opt.step()

        print(f"Generator loss: {g_loss}")
        print(f"Discriminator loss: {d_loss}")
        break
編輯並執行程式碼