AI8 min read
GANs (Generative Adversarial Networks)
Generate realistic images with GANs.
Dr. Jennifer Lee
December 18, 2025
0.0k0
Two networks competing to create realistic data.
What are GANs?
Generator creates fake data, Discriminator judges if it's real.
Idea: They improve each other through competition!
How GANs Work
Generator: Creates fake images
Discriminator: Detects real vs fake
Training: Generator tries to fool Discriminator
Simple GAN Example
import tensorflow as tf
from tensorflow import keras
# Generator model
def make_generator():
model = keras.Sequential([
keras.layers.Dense(256, activation='relu', input_dim=100),
keras.layers.Dense(512, activation='relu'),
keras.layers.Dense(1024, activation='relu'),
keras.layers.Dense(784, activation='sigmoid') # 28x28 image
])
return model
# Discriminator model
def make_discriminator():
model = keras.Sequential([
keras.layers.Dense(1024, activation='relu', input_dim=784),
keras.layers.Dropout(0.3),
keras.layers.Dense(512, activation='relu'),
keras.layers.Dropout(0.3),
keras.layers.Dense(256, activation='relu'),
keras.layers.Dense(1, activation='sigmoid') # Real or Fake
])
return model
generator = make_generator()
discriminator = make_discriminator()
# Compile
discriminator.compile(optimizer='adam', loss='binary_crossentropy')
Training GANs
import numpy as np
# Prepare real data (example with MNIST)
(X_train, _), (_, _) = keras.datasets.mnist.load_data()
X_train = X_train.reshape(-1, 784) / 255.0
batch_size = 128
epochs = 10000
for epoch in range(epochs):
# Train Discriminator
# 1. Real images
idx = np.random.randint(0, X_train.shape[0], batch_size)
real_images = X_train[idx]
real_labels = np.ones((batch_size, 1))
# 2. Fake images
noise = np.random.normal(0, 1, (batch_size, 100))
fake_images = generator.predict(noise)
fake_labels = np.zeros((batch_size, 1))
# Train discriminator
d_loss_real = discriminator.train_on_batch(real_images, real_labels)
d_loss_fake = discriminator.train_on_batch(fake_images, fake_labels)
# Train Generator
noise = np.random.normal(0, 1, (batch_size, 100))
misleading_labels = np.ones((batch_size, 1)) # Fool discriminator!
# Combined model
discriminator.trainable = False
combined = keras.Sequential([generator, discriminator])
combined.compile(optimizer='adam', loss='binary_crossentropy')
g_loss = combined.train_on_batch(noise, misleading_labels)
discriminator.trainable = True
if epoch % 1000 == 0:
print(f"Epoch {epoch}, D Loss: {(d_loss_real + d_loss_fake)/2:.4f}, G Loss: {g_loss:.4f}")
Types of GANs
DCGAN: Uses convolutional layers
StyleGAN: High-quality face generation
CycleGAN: Image-to-image translation
Pix2Pix: Paired image translation
Applications
- Generate realistic faces
- Create art and designs
- Data augmentation
- Image enhancement
Remember
- GANs are hard to train (unstable)
- Require lots of data and compute
- Generator and Discriminator must balance
- Used for creative AI applications
#AI#Advanced#GANs