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