始める無料で始める

トレーニングループ

ついに、これまで定義してきたモデル構造と損失関数が活躍するときです。いよいよ学習を実行します。あなたの役割は、GAN のトレーニングループを実装して実行することです。注意: 実行時間を長くしないため、最初のバッチの後で break 文が入っています。

2 つのオプティマイザ disc_optgen_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
コードを編集して実行