pip install tensorflow pip install numpy import numpy as np import matplotlib.pyplot as plt from tensorflow.keras.layers import Dense, Flatten, Reshape from tensorflow.keras.models import Sequential from tensorflow.keras.optimizers import Adam def build_generator(): model = Sequential() model.add(Dense(128, input_dim=100, activation='relu')) model.add(Dense(784, activation='sigmoid')) model.add(Reshape((28, 28, 1))) return model def build_discriminator(): model = Sequential() model.add(Flatten(input_shape=(28, 28, 1))) model.add(Dense(128, activation='relu')) model.add(Dense(1, activation='sigmoid')) return model def build_gan(generator, discriminator): discriminator.trainable = False gan = Sequential() gan.add(generator) gan.add(discriminator) gan.compile(loss='binary_crossentropy', optimizer='adam') return gan def train_gan(generator, discriminator, gan, noise_dim=100, num_epochs=10000, batch_size=32): for epoch in range(num_epochs): noise = np.random.normal(0, 1, (batch_size, noise_dim)) generated_images = generator.predict(noise) real_images = ... # Load real images from your dataset
# Labels for real and generated images
labels_real = np.ones((batch_size, 1))
labels_fake = np.zeros((batch_size, 1))
# Train the discriminator
d_loss_real = discriminator.train_on_batch(real_images, labels_real)
d_loss_fake = discriminator.train_on_batch(generated_images, labels_fake)
d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
# Train the generator
noise = np.random.normal(0, 1, (batch_size, noise_dim))
labels_gan = np.ones((batch_size, 1))
g_loss = gan.train_on_batch(noise, labels_gan)
# Print progress
print(f"Epoch {epoch}, D Loss: {d_loss[0]}, G Loss: {g_loss}")
# Save generated images at specific intervals
if epoch % save_interval == 0:
save_generated_images(epoch, generator)
def save_generated_images(epoch, generator, examples=10, dim=(1, 10), figsize=(10, 1)):
noise = np.random.normal(0, 1, (examples, 100))
generated_images = generator.predict(noise)
plt.figure(figsize=figsize)
for i in range(examples):
plt.subplot(dim[0], dim[1], i+1)
plt.imshow(generated_images[i], interpolation='nearest', cmap='gray')
plt.axis('off')
plt.tight_layout()
plt.savefig(f'gan_generated_image_epoch_{epoch}.png')
if __name__ == "__main__":
# Build and compile the models
generator = build_generator()
discriminator = build_discriminator()
gan = build_gan(generator, discriminator)
# Train the GAN
train_gan(generator, discriminator, gan)