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