LoslegenKostenlos loslegen

Eine U-Net-Architektur bauen: Layer-Definitionen

In dieser und der nächsten Übung baust du eine U-Net-Architektur von Grund auf. Hier beginnst du mit der Definition der Methode __init__(), in der du Layer und Layer-Blöcke definierst, die das Modell verwendet.

Der Encoder und die transponierten Faltungen wurden bereits für dich definiert. Übrig sind die Faltungsblöcke des Decoders. Du musst jedem Block die passende Anzahl an Eingabe- und Ausgabekanälen übergeben und dabei die Skip-Connections berücksichtigen.

Der erste Block, dec1, erhält als Eingabe die Konkatenation der Ausgabe von upconv3 mit der Ausgabe von enc3. Die Ausgabe von dec1 sollte wiederum der Ausgabe von enc3 entsprechen. Kannst du alle fehlenden Eingabe- und Ausgabegrößen ergänzen?

Diese Übung ist Teil des Kurses

Deep Learning für Bilder mit PyTorch

Kurs anzeigen

Anleitung zur Übung

  • Definiere die drei Faltungsblöcke im Decoder, indem du jeweils die passende Anzahl an Eingabe- und Ausgabekanälen übergibst.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

class UNet(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(UNet, self).__init__()

        self.enc1 = self.conv_block(in_channels, 64)
        self.enc2 = self.conv_block(64, 128)
        self.enc3 = self.conv_block(128, 256)
        self.enc4 = self.conv_block(256, 512)

        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)

        self.upconv3 = nn.ConvTranspose2d(512, 256, kernel_size=2, stride=2)
        self.upconv2 = nn.ConvTranspose2d(256, 128, kernel_size=2, stride=2)
        self.upconv1 = nn.ConvTranspose2d(128, 64, kernel_size=2, stride=2)
        
        # Define the decoder blocks
        self.dec1 = self.conv_block(____, ____)
        self.dec2 = self.conv_block(____, ____)
        self.dec3 = self.conv_block(____, ____)

        self.out = nn.Conv2d(64, out_channels, kernel_size=1)
Code bearbeiten und ausführen