始める無料で始める

Generator の損失

GAN を学習させる前に、generator と discriminator の両方に対する損失関数を定義する必要があります。ここでは前者から始めます。

generator の役割は、discriminator が本物と判定してしまうような偽画像を生成することでした。そのため、生成した画像が discriminator によって偽物(ラベル 0)と分類された場合、generator は損失を受けます。

generator の損失を計算する gen_loss() 関数を定義してください。引数は4つです。

  • gen:generator モデル
  • disc:discriminator モデル
  • num_images:バッチ内の画像数
  • z_dim:入力となるランダムノイズの次元数

この演習はコースの一部です

PyTorch で学ぶ画像向け Deep Learning

コースを見る

演習の手順

  • 形状が num_images × z_dim のランダムノイズを生成し、noise に代入します。
  • generator を使って noise から偽画像を生成し、fake に代入します。
  • 生成した偽画像に対する discriminator の予測を取得します。
  • discriminator の予測と、同じ形状の1からなるテンソルを引数にして criterion を呼び出し、generator の損失を計算します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

def gen_loss(gen, disc, criterion, num_images, z_dim):
    # Define random noise
    noise = ____(num_images, z_dim)
    # Generate fake image
    fake = ____
    # Get discriminator's prediction on the fake image
    disc_pred = ____
    # Compute generator loss
    criterion = nn.BCEWithLogitsLoss()
    gen_loss = ____(____, ____)
    return gen_loss
コードを編集して実行