訓練迴圈
終於,你先前在模型架構與損失函式上投入的心力要開花結果了:是時候開始訓練!你的任務是實作並執行 GAN 的訓練迴圈。注意:為了避免執行時間過長,在第一個資料批次後放置了 break 陳述式。
兩個最佳化器 disc_opt 與 gen_opt 已經初始化為 Adam()。你先前定義用來計算損失的函式 gen_loss() 和 disc_loss() 也已可直接使用。同時也為你準備好了 dataloader。
回顧一下:
disc_loss()的引數為:gen、disc、real、cur_batch_size、z_dim。gen_loss()的引數為:gen、disc、cur_batch_size、z_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