U-Net oluşturma: katman tanımları
Bu ve sonraki egzersizde, sıfırdan bir U-Net mimarisi kuracaksın. Burada, modelin kullanacağı katmanları ve katman bloklarını tanımlayacağın __init__() metodunu yazmaya başlayacaksın.
Encoder ve transpoze evrişim (transposed convolution) senin için zaten tanımlandı. Geriye decoder’ın evrişimsel blokları kaldı. Atlama bağlantılarını (skip connections) dikkate alarak her birine uygun giriş ve çıkış kanal sayılarını geçirmen gerekiyor.
İlk blok olan dec1, girdi olarak upconv3 çıktısının enc3 çıktısıyla birleştirilmesini alacak. Sırasıyla, dec1 çıktısı enc3 çıktısına eşit olmalı. Tüm eksik giriş ve çıkış boyutlarını doldurabilir misin?
Bu egzersiz
PyTorch ile Görüntüler için Deep Learning
kursunun bir parçasıdırEgzersiz talimatları
- Decoder’daki üç evrişimsel bloğu, her biri için uygun giriş ve çıkış kanal sayılarını geçirerek tanımla.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
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)