トレーニングループ
ついに、これまで定義してきたモデル構造と損失関数が活躍するときです。いよいよ学習を実行します。あなたの役割は、GAN のトレーニングループを実装して実行することです。注意: 実行時間を長くしないため、最初のバッチの後で break 文が入っています。
2 つのオプティマイザ 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 で学ぶ画像向け Deep Learning
演習の手順
- 生成器、識別器、実画像のサンプル、現在のバッチサイズ、ノイズサイズ
16の順でdisc_loss()に渡して識別器の損失を計算し、結果をd_lossに代入します。 d_lossを使って勾配を計算します。- 生成器、識別器、現在のバッチサイズ、ノイズサイズ
16の順でgen_loss()に渡して生成器の損失を計算し、結果を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