Konvolutionaler Discriminator
Nachdem der Generator des DCGAN bereit ist, besteht der letzte Schritt vor dem Training darin, den konvolutionalen Discriminator zu definieren.
torch.nn ist bereits unter dem üblichen Alias importiert. Für den konvolutionalen Discriminator verwendest du eine benutzerdefinierte Funktion gc_disc_block(), die einen Block aus einer Convolution gefolgt von einer Batch-Norm und der Leaky-ReLU-Aktivierung zurückgibt. Unten kannst du die Definition von dc_disc_block() ansehen.
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),
)
Diese Übung ist Teil des Kurses
Deep Learning für Bilder mit PyTorch
Anleitung zur Übung
- Füge den ersten Discriminator-Block mit der benutzerdefinierten Funktion
dc_disc_block()hinzu, mit3Eingangs-Feature-Maps und512Ausgangs-Feature-Maps. - Füge die Convolution-Schicht mit der Ausgabedimension
1hinzu. - Übergib in der Methode
forward()die Eingabe durch den sequentiellen Block, den du in__init__()definiert hast.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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)