How GANs Work
- Latent Space: Provides random noise as input to the generator, allowing for diverse outputs.
- Generator: - Creates fake samples by transforming noise from the latent space. - Aims to generate data that closely resembles real samples to fool the discriminator.
- Discriminator: - Evaluates whether the input data (real or fake) is authentic. - Outputs a prediction: "Real" or "Fake."
- Adversarial Training: - The generator and discriminator compete in a zero-sum game. - **Generator** minimizes the discriminator's ability to identify fake samples. - **Discriminator** maximizes its ability to differentiate real from fake samples.
- Output: - Fake samples generated by the generator (e.g., synthetic images). - Real samples evaluated by the discriminator for authenticity.
- Applications: - Image generation (e.g., creating realistic human faces). - Data augmentation (e.g., increasing dataset size with synthetic data). - Style transfer (e.g., turning sketches into paintings). - Video and text generation.
Generative Network Code Example
Here's how we can define the layers of a Generative Adversarial Network (GAN):
import tensorflow as tf
from tensorflow.keras import layers, models
# Generator Model
def build_generator():
model = tf.keras.Sequential([
layers.Input(shape=(100,)), # Latent space input (noise vector)
layers.Dense(256, activation="relu"), # Fully Connected Layer
layers.BatchNormalization(), # Normalization for stability
layers.Dense(512, activation="relu"),
layers.BatchNormalization(),
layers.Dense(1024, activation="relu"),
layers.BatchNormalization(),
layers.Dense(28 * 28 * 1, activation="tanh"), # Output Layer (28x28 grayscale image)
layers.Reshape((28, 28, 1)) # Reshaping to image dimensions
])
return model
# Discriminator Model
def build_discriminator():
model = tf.keras.Sequential([
layers.Input(shape=(28, 28, 1)), # Input Layer (28x28 grayscale image)
layers.Flatten(), # Flatten image into 1D vector
layers.Dense(512, activation="relu"), # Fully Connected Layer
layers.Dense(256, activation="relu"),
layers.Dense(1, activation="sigmoid") # Output Layer (real or fake classification)
])
return model
# GAN Model
def build_gan(generator, discriminator):
discriminator.trainable = False # Freeze discriminator during generator training
model = tf.keras.Sequential([
generator,
discriminator
])
return model
# Instantiate Generator and Discriminator
generator = build_generator()
discriminator = build_discriminator()
gan = build_gan(generator, discriminator)