ComenzarEmpieza gratis

Creación de una red U-Net: definiciones de capas

En este ejercicio y en el siguiente, construirás una arquitectura U-Net desde cero. Aquí, comienza definiendo el método « __init__() », donde definirás las capas y los bloques de capas que utilizará el modelo.

El codificador y la convolución transpuesta ya se han definido para ti. Lo que queda son los bloques convolucionales del decodificador. Debes pasar el número adecuado de canales de entrada y salida a cada uno de ellos, teniendo en cuenta las conexiones omitidas.

El primer bloque, dec1, tomará como entrada la concatenación de la salida de upconv3 con la salida de enc3. La salida de « dec1 », a su vez, debería ser igual a la salida de « enc3 ». ¿Puedes completar todos los tamaños de entrada y salida que faltan?

Este ejercicio forma parte del curso

Aprendizaje profundo para imágenes con PyTorch

Ver curso

Instrucciones del ejercicio

  • Define los tres bloques convolucionales en el decodificador pasando el número adecuado de canales de entrada y salida a cada uno de ellos.

Ejercicio interactivo práctico

Prueba este ejercicio completando el código de muestra.

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)
Editar y ejecutar código