Construirea unui U-Net: definirea straturilor
În acest exercițiu și în cel următor, vei construi o arhitectură U-Net de la zero. Aici începi prin a defini metoda __init__(), unde vei specifica straturile și blocurile de straturi pe care le va folosi modelul.
Encoderului și convoluțiile transpuse au fost deja definite pentru tine. Ce mai rămâne sunt blocurile convoluționale ale decoderului. Trebuie să transmiți numărul potrivit de canale de intrare și de ieșire pentru fiecare dintre ele, ținând cont de conexiunile de tip skip.
Primul bloc, dec1, va primi ca intrare concatenarea ieșirii upconv3 cu ieșirea enc3. La rândul său, ieșirea dec1 ar trebui să fie egală cu ieșirea enc3. Poți completa toate dimensiunile de intrare și ieșire lipsă?
Acest exercițiu face parte din cursul
Deep Learning pentru imagini cu PyTorch
Instrucțiuni pentru exercițiu
- Definește cele trei blocuri convoluționale din decoder, transmițând numărul potrivit de canale de intrare și de ieșire pentru fiecare dintre ele.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)