File size: 3,366 Bytes
b481d58
29099e4
 
 
 
b481d58
29099e4
b481d58
 
 
 
 
29099e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
---
title: GAN Interactive Demo - MNIST
emoji: 🎨
colorFrom: purple
colorTo: pink
sdk: gradio
sdk_version: 4.44.0
app_file: app.py
pinned: false
license: mit
---

# 🎨 GAN Interactive Demo - Exploración del Espacio Latente

Una aplicación interactiva para explorar cómo funcionan las **Redes Generativas Adversarias (GANs)** entrenadas en el dataset MNIST de dígitos manuscritos.

## 🌟 Características

### 1. Generación Aleatoria
Genera dígitos manuscritos desde vectores de ruido aleatorio con un solo clic.

### 2. Control Manual
Ajusta las primeras 10 dimensiones del vector latente (de 100 dimensiones totales) usando sliders interactivos para ver cómo cada dimensión afecta la generación.

### 3. Interpolación
Observa el **morphing suave** entre dos dígitos diferentes. Esto demuestra que el espacio latente aprendido por la GAN es continuo y significativo.

### 4. Visualización del Espacio Latente
Inspirado en el **TensorFlow Projector**, esta sección te permite:
- Visualizar el espacio latente de 100 dimensiones reducido a 3D usando **PCA**
- Explorar agrupaciones usando **t-SNE** en 2D
- Generar dígitos desde puntos específicos del espacio

### 5. Grid de Comparación
Genera múltiples dígitos simultáneamente para observar la diversidad y calidad de las generaciones.

## 🏗️ Arquitectura

### Generador
```
Input: Vector latente (100D) ~ N(0,1)

Dense (7×7×256) + BatchNorm + LeakyReLU

Reshape (7, 7, 256)

Conv2DTranspose (7×7×128) + BatchNorm + LeakyReLU

Conv2DTranspose (14×14×64) + BatchNorm + LeakyReLU

Conv2DTranspose (28×28×1) + Tanh

Output: Imagen (28×28×1) en rango [-1, 1]
```

### Discriminador
```
Input: Imagen (28×28×1)

Conv2D (14×14×64) + LeakyReLU + Dropout(0.3)

Conv2D (7×7×128) + LeakyReLU + Dropout(0.3)

Flatten + Dense(1)

Output: Logit (clasificación binaria: real/falso)
```

## 📊 Entrenamiento

- **Dataset**: MNIST (60,000 imágenes de entrenamiento)
- **Épocas**: 50
- **Batch Size**: 256
- **Optimizer**: Adam (learning rate = 1e-4)
- **Loss**: Binary Cross-Entropy
- **Tiempo de entrenamiento**: ~20 minutos en CPU

## 🎓 Propósito Educativo

Esta demo fue creada para una clase de Machine Learning para:
1. Demostrar visualmente cómo las GANs aprenden distribuciones de datos
2. Mostrar que el espacio latente es continuo y navegable
3. Permitir experimentación interactiva con los conceptos
4. Inspirar a los estudiantes para su proyecto final de GANs

## 🚀 Uso Local

```bash
# Clonar el repositorio
git clone https://huggingface.co/spaces/[username]/gan-interactive-demo
cd gan-interactive-demo

# Instalar dependencias
pip install -r requirements.txt

# Ejecutar la aplicación
python app.py
```

## 📚 Referencias

- **Paper Original de GANs**: [Generative Adversarial Networks](https://arxiv.org/abs/1406.2661) (Goodfellow et al., 2014)
- **DCGAN**: [Unsupervised Representation Learning with Deep Convolutional GANs](https://arxiv.org/abs/1511.06434) (Radford et al., 2015)
- **GAN Lab**: [Understanding Complex Deep Generative Models](https://poloclub.github.io/ganlab/)

## 📝 Licencia

MIT License - Siéntete libre de usar este código para propósitos educativos.

## 🤝 Contribuciones

¡Contribuciones, issues y sugerencias son bienvenidas!

---

**Creado con ❤️ para la clase de Machine Learning**