Generator
GAN のジェネレーターは、ランダムなノイズベクトルを入力として受け取り、生成画像を出力します。アーキテクチャを再利用しやすくするため、入力と出力の形状をモデルの引数として受け取るようにします。こうすることで、異なるサイズの入力ノイズやさまざまな形状の画像に対して同じモデルを使えます。
torch.nn はすでに nn としてインポートされています。さらに、全結合層・バッチ正規化・ReLU 活性化から成るブロックを返すカスタム関数 gen_block() も利用できます。これをジェネレーターの基本ブロックとして使います。
def gen_block(in_dim, out_dim):
return nn.Sequential(
nn.Linear(in_dim, out_dim),
nn.BatchNorm1d(out_dim),
nn.ReLU(inplace=True)
)
この演習はコースの一部です
PyTorch で学ぶ画像向け Deep Learning
演習の手順
self.generatorを順伝播型のモデルとして定義します。- 最後の
gen_blockの後に、適切な入力サイズとout_dimを出力サイズにもつ全結合層を追加します。 - その全結合層の後に Sigmoid 活性化を追加します。
forward()メソッドでは、モデルの入力をself.generatorに通します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
class Generator(nn.Module):
def __init__(self, in_dim, out_dim):
super(Generator, self).__init__()
# Define generator block
self.generator = ____(
gen_block(in_dim, 256),
gen_block(256, 512),
gen_block(512, 1024),
# Add linear layer
____
# Add activation
____
)
def forward(self, x):
# Pass input through generator
return ____