Bygga ett U-Net: definition av lager
I den här och nästa övning ska du bygga en U-Net-arkitektur från grunden. Här börjar du med att definiera metoden __init__(), där du definierar lager och lagerblock som modellen ska använda.
Enkodern och den transponerade konvolutionen har redan definierats åt dig. Det som återstår är dekoderns konvolutionsblock. Du behöver ange rätt antal indata- och utdatakanaler för vart och ett av dem, med hänsyn till skip-kopplingarna.
Det första blocket, dec1, tar som indata konkatenationen av utdata från upconv3 och enc3. Utdata från dec1 ska i sin tur vara lika med utdata från enc3. Kan du fylla i alla saknade indata- och utdatastorlekar?
Den här övningen är en del av kursen
Djupinlärning för bilder med PyTorch
Övningsinstruktioner
- Definiera de tre konvolutionsblocken i dekodern genom att ange rätt antal indata- och utdatakanaler för vart och ett av dem.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)