Discriminador convolucional
Con el generador DCGAN listo, el último paso antes de poder proceder al entrenamiento es definir el discriminador convolucional.
torch.nn
se importa con su alias habitual. Para construir el discriminador convolucional, utilizarás una función personalizada « gc_disc_block()
» que devuelve un bloque de una convolución seguida de una norma por lotes y la activación Leaky ReLU. Puedes consultar la definición de « dc_disc_block()
» a continuación.
def dc_disc_block(in_dim, out_dim, kernel_size, stride):
return nn.Sequential(
nn.Conv2d(in_dim, out_dim, kernel_size, stride=stride),
nn.BatchNorm2d(out_dim),
nn.LeakyReLU(0.2),
)
Este ejercicio forma parte del curso
Aprendizaje profundo para imágenes con PyTorch
Instrucciones del ejercicio
- Añade el primer bloque discriminador utilizando la función personalizada «
dc_disc_block()
» con mapas de características de entrada «3
» y mapas de características de salida «512
». - Añade la capa convolucional con un tamaño de salida de
1
. - En el método
forward()
, pasa la entrada a través del bloque secuencial que definiste en__init__()
.
Ejercicio interactivo práctico
Prueba este ejercicio completando el código de muestra.
class DCDiscriminator(nn.Module):
def __init__(self, kernel_size=4, stride=2):
super(DCDiscriminator, self).__init__()
self.disc = nn.Sequential(
# Add first discriminator block
dc_disc_block(3, 512, kernel_size, stride),
dc_disc_block(512, 1024, kernel_size, stride),
# Add a convolution
nn.Conv2d(1024, 1, kernel_size, stride=stride),
)
def forward(self, x):
# Pass input through sequential block
x = ____
return x.view(len(x), -1)