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
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)