LoslegenKostenlos starten

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

<Kurs>Deep Learning für Bilder mit PyTorch</Kurs>
Kurs ansehen

Übungsanweisungen

  • Füge den ersten Discriminator-Block mit der benutzerdefinierten Funktion dc_disc_block() hinzu, mit 3 Eingangs-Feature-Maps und 512 Ausgangs-Feature-Maps.
  • Füge die Convolution-Schicht mit der Ausgabedimension 1 hinzu.
  • Übergib in der Methode forward() die Eingabe durch den sequentiellen Block, den du in __init__() definiert hast.

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

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)
Code bearbeiten und ausführen