0% found this document useful (0 votes)
3 views4 pages

Gan Program

The document provides a complete implementation of a Generative Adversarial Network (GAN) using TensorFlow and Keras to generate images from the MNIST dataset. It includes steps for loading and preprocessing the dataset, building the generator and discriminator models, defining loss functions and optimizers, and executing the training loop. The training process generates and saves images at each epoch, showcasing the GAN's ability to create realistic digit images.

Uploaded by

tabasum.majeed
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views4 pages

Gan Program

The document provides a complete implementation of a Generative Adversarial Network (GAN) using TensorFlow and Keras to generate images from the MNIST dataset. It includes steps for loading and preprocessing the dataset, building the generator and discriminator models, defining loss functions and optimizers, and executing the training loop. The training process generates and saves images at each epoch, showcasing the GAN's ability to create realistic digit images.

Uploaded by

tabasum.majeed
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

import tensorflow as tf

from [Link] import layers


import numpy as np
import [Link] as plt

# 1. Load and preprocess MNIST dataset


(x_train, _), (_, _) = [Link].load_data()

# Normalize to [-1, 1] for GAN


x_train = (x_train - 127.5) / 127.5
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)

BUFFER_SIZE = 60000
BATCH_SIZE = 256

dataset =
[Link].from_tensor_slices(x_train).shuffle(BUFFER_SIZE).batch(BAT
CH_SIZE)

# 2. Build Generator
def build_generator():
model = [Link]([
[Link](256, use_bias=False, input_shape=(100,)),
[Link](),
[Link](),

[Link](512),
[Link](),
[Link](),

[Link](1024),
[Link](),
[Link](),

[Link](28*28*1, activation='tanh'),
[Link]((28, 28, 1))
])
return model

# 3. Build Discriminator
def build_discriminator():
model = [Link]([
[Link](input_shape=(28, 28, 1)),
[Link](512),
[Link](),
[Link](256),
[Link](),
[Link](1, activation='sigmoid')
])
return model

generator = build_generator()
discriminator = build_discriminator()

# 4. Loss and Optimizers


cross_entropy = [Link]()

def generator_loss(fake_output):
return cross_entropy(tf.ones_like(fake_output), fake_output)

def discriminator_loss(real_output, fake_output):


real_loss = cross_entropy(tf.ones_like(real_output), real_output)
fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)
return real_loss + fake_loss

generator_optimizer = [Link](1e-4)
discriminator_optimizer = [Link](1e-4)

# 5. Training Step
@[Link]
def train_step(images):
noise = [Link]([BATCH_SIZE, 100])

with [Link]() as gen_tape, [Link]() as disc_tape:


generated_images = generator(noise, training=True)

real_output = discriminator(images, training=True)


fake_output = discriminator(generated_images, training=True)

gen_loss = generator_loss(fake_output)
disc_loss = discriminator_loss(real_output, fake_output)

gradients_gen = gen_tape.gradient(gen_loss,
generator.trainable_variables)
gradients_disc = disc_tape.gradient(disc_loss,
discriminator.trainable_variables)

generator_optimizer.apply_gradients(zip(gradients_gen,
generator.trainable_variables))
discriminator_optimizer.apply_gradients(zip(gradients_disc,
discriminator.trainable_variables))

# 6. Training Loop
EPOCHS = 50
noise_dim = 100
num_examples_to_generate = 16

seed = [Link]([num_examples_to_generate, noise_dim])

def generate_and_save_images(model, epoch, test_input):


predictions = model(test_input, training=False)

fig = [Link](figsize=(4,4))
for i in range([Link][0]):
[Link](4, 4, i+1)
[Link](predictions[i, :, :, 0] * 127.5 + 127.5, cmap='gray')
[Link]('off')

[Link]()

def train(dataset, epochs):


for epoch in range(epochs):
for image_batch in dataset:
train_step(image_batch)

print(f"Epoch {epoch+1} completed")


generate_and_save_images(generator, epoch+1, seed)

# 7. Run Training
train(dataset, EPOCHS)

You might also like