識別器の損失
識別器の損失を定義しましょう。識別器の役割は、画像が本物か偽物かを分類することでした。したがって、生成器の出力を本物(ラベル 1)と誤って判定したり、本物の画像を偽物(ラベル 0)と誤判定した場合に、識別器は損失を負います。
識別器の損失を計算する disc_loss() 関数を定義してください。引数は5つです。
gen:生成器モデルdisc:識別器モデルreal:学習データからの本物画像のサンプルnum_images:バッチ内の画像枚数z_dim:入力ノイズの次元数
この演習はコースの一部です
PyTorch で学ぶ画像向け Deep Learning
演習の手順
- 識別器を使って
fake画像を分類し、予測をdisc_pred_fakeに代入します。 - 偽画像に対する損失成分は、識別器の偽画像に対する予測と、同じ形状のゼロのテンソルを使って
criterionを呼び出して計算します。 - 識別器を使って
real画像を分類し、予測をdisc_pred_realに代入します。 - 本物画像に対する損失成分は、識別器の本物画像に対する予測と、同じ形状の1のテンソルを使って
criterionを呼び出して計算します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
def disc_loss(gen, disc, real, num_images, z_dim):
criterion = nn.BCEWithLogitsLoss()
noise = torch.randn(num_images, z_dim)
fake = gen(noise)
# Get discriminator's predictions for fake images
disc_pred_fake = ____
# Calculate the fake loss component
fake_loss = ____
# Get discriminator's predictions for real images
disc_pred_real = ____
# Calculate the real loss component
real_loss = ____
disc_loss = (real_loss + fake_loss) / 2
return disc_loss