LoslegenKostenlos starten

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

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

Übungsanweisungen

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

Interaktive praktische Übung

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

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