EPOCHS = 50

train(train_dataset, EPOCHS)

# Шаг 7: Генерация изображений

def generate_and_save_images(model, epoch, test_input):

predictions = model(test_input, training=False)

fig = plt.figure(figsize=(4, 4))

for i in range(predictions.shape[0]):

plt.subplot(4, 4, i+1)

plt.imshow(predictions[i, :, :, 0] * 127.5 + 127.5, cmap='gray')

plt.axis('off')

plt.savefig(f'image_at_epoch_{epoch:04d}.png')

plt.show()

# Генерация изображений после обучения

noise = tf.random.normal([16, 100])

generate_and_save_images(generator, EPOCHS, noise)

```

Пояснение:

1. Импорт библиотек: Импортируются необходимые библиотеки TensorFlow, Keras, numpy и matplotlib.

2. Подготовка данных: Загружаются данные MNIST и нормализуются в диапазоне [-1, 1]. Данные затем разделяются на батчи для обучения.

3. Построение генератора:

– Генератор создает изображения из случайного шума. Он включает плотные слои, batch normalization и Conv2DTranspose слои для генерации изображений размером 28x28 пикселей.

4. Построение дискриминатора:

– Дискриминатор оценивает, являются ли изображения реальными или сгенерированными. Он состоит из свёрточных слоев, слоев LeakyReLU и dropout для классификации изображений.

5. Построение GAN:

– Генератор и дискриминатор объединяются в модель GAN. Определяются функции потерь и оптимизаторы для обеих моделей.

6. Обучение GAN:

– GAN обучается в течение заданного числа эпох. На каждом шаге обучения генератор пытается создать реалистичные изображения, а дискриминатор учится отличать реальные изображения от сгенерированных.

7. Генерация изображений:

– После обучения GAN, создаются и сохраняются изображения, сгенерированные генератором.

Этот пример демонстрирует, как создать простую GAN для генерации рукописных цифр из набора данных MNIST. Модель может быть улучшена за счет добавления дополнительных слоев, настройки гиперпараметров и использования более сложных архитектур.

8. Построение сложной GAN для генерации реалистичных изображений

– Задача: Генерация изображений лиц.

Для создания сложной генеративно-состязательной сети (GAN) для генерации реалистичных изображений лиц можно использовать библиотеку TensorFlow и Keras. Мы будем использовать улучшенную архитектуру GAN, известную как DCGAN (Deep Convolutional GAN), которая доказала свою эффективность в создании реалистичных изображений. Набор данных CelebA, содержащий фотографии лиц знаменитостей, является хорошим выбором для этой задачи.

Шаги:

1. Импорт библиотек и модулей.

2. Подготовка данных.

3. Построение генератора.

4. Построение дискриминатора.

5. Построение и компиляция GAN.

6. Обучение GAN.

7. Генерация изображений.

Пример кода:

```python

import tensorflow as tf

from tensorflow.keras import layers, models

import numpy as np

import os

import matplotlib.pyplot as plt

from tensorflow.keras.preprocessing.image import ImageDataGenerator

# Шаг 1: Импорт библиотек

import tensorflow as tf

from tensorflow.keras import layers, models

import numpy as np

import matplotlib.pyplot as plt

import os

# Шаг 2: Подготовка данных

# Загрузка набора данных CelebA

# Этот пример предполагает, что данные находятся в папке 'img_align_celeba/img_align_celeba'

# Скачивание и подготовка данных не входит в код

DATA_DIR = 'img_align_celeba/img_align_celeba'

IMG_HEIGHT = 64

IMG_WIDTH = 64

BATCH_SIZE = 128

BUFFER_SIZE = 60000

def load_image(image_path):

image = tf.io.read_file(image_path)

image = tf.image.decode_jpeg(image, channels=3)

image = tf.image.resize(image, [IMG_HEIGHT, IMG_WIDTH])

image = (image – 127.5) / 127.5 # Нормализация изображений в диапазоне [-1, 1]