Нейросети. Генерация изображений - страница 4

Шрифт
Интервал


Рассмотрим пример простой реализации GAN для генерации реалистичных изображений с помощью библиотеки TensorFlow и Keras в Python. Этот пример демонстрирует принцип работы GAN на основе простых полносвязных слоев. Он использует набор данных MNIST с рукописными цифрами.

```python

import numpy as np

import tensorflow as tf

from tensorflow.keras import layers

# Загрузка данных MNIST

(train_images, _), (_, _) = tf.keras.datasets.mnist.load_data()

train_images = train_images.reshape(train_images.shape[0], 28 * 28).astype('float32')

train_images = (train_images – 127.5) / 127.5 # Нормализация данных в диапазоне [-1, 1]

# Гиперпараметры

random_dim = 100

epochs = 10000

batch_size = 128

# Создание генератора

def build_generator():

model = tf.keras.Sequential()

model.add(layers.Dense(256, input_dim=random_dim))

model.add(layers.LeakyReLU(0.2))

model.add(layers.BatchNormalization())

model.add(layers.Dense(512))

model.add(layers.LeakyReLU(0.2))

model.add(layers.BatchNormalization())

model.add(layers.Dense(1024))

model.add(layers.LeakyReLU(0.2))

model.add(layers.BatchNormalization())

model.add(layers.Dense(784, activation='tanh'))

model.add(layers.Reshape((28, 28)))

return model

# Создание дискриминатора

def build_discriminator():

model = tf.keras.Sequential()

model.add(layers.Flatten(input_shape=(28, 28)))

model.add(layers.Dense(1024))

model.add(layers.LeakyReLU(0.2))

model.add(layers.Dense(512))

model.add(layers.LeakyReLU(0.2))

model.add(layers.Dense(256))

model.add(layers.LeakyReLU(0.2))

model.add(layers.Dense(1, activation='sigmoid'))

return model

# Функции потерь и оптимизаторы

cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)

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)

total_loss = real_loss + fake_loss

return total_loss

def generator_loss(fake_output):

return cross_entropy(tf.ones_like(fake_output), fake_output)

generator_optimizer = tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5)

discriminator_optimizer = tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5)

# Создание генератора и дискриминатора

generator = build_generator()

discriminator = build_discriminator()

# Функция обучения GAN

def train_gan():