Discriminador convolucional
Con el generador de la DCGAN listo, el último paso antes de poder entrenarlo es definir el discriminador convolucional.
torch.nn está importado por ti con su alias habitual. Para construir el discriminador convolucional, usarás una función personalizada gc_disc_block() que devuelve un bloque con una convolución seguida de una normalización por lotes y la activación Leaky ReLU. Puedes revisar 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
Deep Learning para imágenes con PyTorch
Instrucciones del ejercicio
- Añade el primer bloque del discriminador usando la función personalizada
dc_disc_block()con3mapas de características de entrada y512mapas de características de salida. - Añade la capa convolucional con tamaño de salida
1. - En el método
forward(), pasa la entrada por el bloque secuencial que definiste en__init__().
Ejercicio interactivo práctico
Prueba este ejercicio y completa 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)