卷積式判別器
在 DCGAN 的產生器已經就緒後,要開始訓練前的最後一步,就是定義卷積式判別器。
torch.nn 已經以慣用別名幫你匯入。為了建立卷積式判別器,你會使用自訂的 gc_disc_block() 函式,它會回傳由「卷積層 → 批次正規化 → Leaky ReLU 活化函式」組成的模組。你可以在下方查看 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 進行影像深度學習
練習說明
- 使用自訂的
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)