Programming Ocean Academy

A Typical Generative Adversarial Neural Network (GAN)

Understand the intricate workings of GANs in an interactive and visually appealing way.

GAN Architecture

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)