Python Data Science Program
📓 Abrir notebook en GitHub

Clase 158 — GANs: DCGAN, Progressive GAN, StyleGAN

Parte: 2 — Deep Learning · Fuente: Géron, cap. 17 § Generative Adversarial Networks + Goodfellow (2014). ⏱️ Duración estimada: 80 min.

🎯 Objetivo

Construir un GAN (Generative Adversarial Network, Goodfellow 2014) — dos redes en juego adversarial: Generador crea muestras desde noise; Discriminador distingue real de falso. El equilibrio Nash de este juego = generador que genera muestras indistinguibles de la distribución real. Conocer las variantes principales: DCGAN, Progressive GAN, StyleGAN (caras hiperrealistas).

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. DCGAN básico: G y D convolucionales. Custom training loop con dos tf.function (train_d, train_g).
  2. Diagnóstico: graficar D_loss y G_loss por step. Si D_loss → 0, G está perdiendo.
  3. Mode collapse: tras N épocas, generar 64 samples. Si todos son la misma cosa → collapse.
  4. WGAN-GP: implementar gradient penalty en la D loss. Comparar estabilidad vs DCGAN.
  5. FID: implementar (o usar tensorflow_gan.eval.fid) y reportar FID del modelo.

📝 Homework verificable

DCGAN en Fashion-MNIST:

  1. Generator: Dense(7*7*128) → reshape → Conv2DTranspose × 3 hasta 28×28.
  2. Discriminator: Conv2D × 3 → Dense(1).
  3. Entrenar 50 épocas; generar grid 8×8.
  4. Reportar D_loss y G_loss finales; visual del grid.

Criterio de aceptación: las muestras generadas son reconocibles como prendas (aunque imperfectas); el training es razonablemente estable (sin colapsar a un solo modo).

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
Mode collapse D muy fuerte, G no puede engañar. Fix: WGAN-GP, batch normalization en G, bajar lr_D.
Training inestable, oscilaciones LR alto en ambos. Fix: Adam(2e-4, beta_1=0.5) clásico DCGAN.
D_loss = 0 D resolvió. Fix: hacer D más débil o agregar noise/dropout a inputs de D.
Outputs muy borrosos Underfit de G. Fix: G más expresivo, más épocas.
Outputs de baja resolución bien, alta resolución pésimo Sin Progressive Growing. Fix: usar StyleGAN o difusión.

❓ Preguntas frecuentes

❓ ¿GAN sigue relevante en 2026?

StyleGAN3 sigue siendo competitivo para caras y generación en general "rápida" (1 forward pass). Difusión gana en calidad para texto-to-image complejo.

❓ ¿FID o IS?

FID es mejor (más robusta a artifacts). IS está deprecada.

❓ ¿Conditional GAN?

cGAN (Mirza & Osindero 2014): condicionar en label o texto. Permite control sobre qué generar.

❓ ¿GAN inversion?

Encontrar z tal que G(z) ≈ imagen_dada. Útil para edición. Difícil; StyleGAN tiene buenas implementaciones.

❓ ¿Por qué Diffusion ganó?

Más estable de entrenar (sin min-max), mejor calidad de outputs, controllable con text. La explicación más simple: optimiza log p(x) directamente, GAN optimiza un divergence relacionado pero no la log-likelihood.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 159 — Modelos de difusión (+ Stable Diffusion XL, ControlNet, LCM)