Generador convolucional
Define un generador convolucional siguiendo las directrices DCGAN comentadas en el último vídeo.
torch.nn
Se ha importado previamente como nn
para tu comodidad. Además, hay disponible una función personalizada dc_gen_block()
, que devuelve un bloque de una convolución transpuesta, una normalización por lotes y una activación ReLU. Esta función sirve como componente fundamental para construir el generador convolucional. A continuación, puedes familiarizarte con la definición de « dc_gen_block()
».
def dc_gen_block(in_dim, out_dim, kernel_size, stride):
return nn.Sequential(
nn.ConvTranspose2d(in_dim, out_dim, kernel_size, stride=stride),
nn.BatchNorm2d(out_dim),
nn.ReLU()
)
Este ejercicio forma parte del curso
Aprendizaje profundo para imágenes con PyTorch
Instrucciones del ejercicio
- Añade el último bloque generador, asignando el tamaño de los mapas de características a un
256
. - Añade una convolución transpuesta con un tamaño de salida de
3
. - Añade la activación tanh.
Ejercicio interactivo práctico
Prueba este ejercicio completando el código de muestra.
class DCGenerator(nn.Module):
def __init__(self, in_dim, kernel_size=4, stride=2):
super(DCGenerator, self).__init__()
self.in_dim = in_dim
self.gen = nn.Sequential(
dc_gen_block(in_dim, 1024, kernel_size, stride),
dc_gen_block(1024, 512, kernel_size, stride),
# Add last generator block
____,
# Add transposed convolution
____(____, ____, kernel_size, stride=stride),
# Add tanh activation
____
)
def forward(self, x):
x = x.view(len(x), self.in_dim, 1, 1)
return self.gen(x)