始める無料で始める

畳み込み型 Discriminator

DCGAN の generator が用意できたので、学習に進む前の最後のステップとして、畳み込み型の discriminator を定義します。

torch.nn は通常のエイリアスでインポート済みです。畳み込み型 discriminator を構築するために、畳み込み、バッチ正規化、Leaky ReLU 活性化を順に返すカスタム関数 gc_disc_block() を使います。以下で dc_disc_block() の定義を確認できます。

def dc_disc_block(in_dim, out_dim, kernel_size, stride):
    return nn.Sequential(
        nn.Conv2d(in_dim, out_dim, kernel_size, stride=stride),
        nn.BatchNorm2d(out_dim),
        nn.LeakyReLU(0.2),
    )

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

PyTorch で学ぶ画像向け Deep Learning

コースを見る

演習の手順

  • 最初の discriminator ブロックを、カスタム関数 dc_disc_block() を使って追加し、入力特徴マップを 3、出力特徴マップを 512 にしてください。
  • 出力サイズが 1 の畳み込み層を追加してください。
  • forward() メソッドでは、__init__() で定義したシーケンシャルブロックに入力を通してください。

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

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

class DCDiscriminator(nn.Module):
    def __init__(self, kernel_size=4, stride=2):
        super(DCDiscriminator, self).__init__()
        self.disc = nn.Sequential(
          	# Add first discriminator block
            dc_disc_block(3, 512, kernel_size, stride),
            dc_disc_block(512, 1024, kernel_size, stride),
          	# Add a convolution
            nn.Conv2d(1024, 1, kernel_size, stride=stride),
        )

    def forward(self, x):
        # Pass input through sequential block
        x = ____
        return x.view(len(x), -1)
コードを編集して実行