if epoch % 100 == 0:
print(f"Epoch: {epoch}, Discriminator Loss: {d_loss}, Generator Loss: {g_loss}")
# Обучение GAN
gan = tf.keras.Sequential([generator, discriminator])
gan.compile(loss='binary_crossentropy', optimizer=generator_optimizer)
train_gan()
```
Код представляет собой простую реализацию генеративной сети (GAN) для генерации реалистичных изображений с использованием библиотек TensorFlow и Keras в Python. Давайте подробно опишем каждую часть кода:
1. Загрузка данных MNIST:
– Загружается набор данных MNIST с рукописными цифрами с помощью функции `tf.keras.datasets.mnist.load_data()`.
– Обучающие изображения сохраняются в переменной `train_images`, а метки классов (которые в данном случае не используются) – в переменной `_`.
– Изображения преобразуются в одномерный формат и нормализуются в диапазоне [-1, 1], чтобы облегчить обучение модели.
2. Определение гиперпараметров:
– `random_dim`: размерность входного шумового вектора (латентного пространства), который будет использоваться для генерации изображений.
– `epochs`: количество эпох обучения GAN.
– `batch_size`: размер батча, используемого для обучения на каждой итерации.
3. Создание генератора (`build_generator`):
– Генератор представляет собой нейронную сеть, которая принимает случайный шум или вектор из латентного пространства и генерирует синтетические изображения.
– В данном примере генератор состоит из полносвязных слоев с функцией активации LeakyReLU и слоями BatchNormalization для стабилизации обучения.
– Финальный слой генератора имеет функцию активации `tanh`, чтобы ограничить значения изображений в диапазоне [-1, 1].
4. Создание дискриминатора (`build_discriminator`):
– Дискриминатор представляет собой нейронную сеть, которая принимает изображения и классифицирует их на "реальные" (1) или "сгенерированные" (0).
– В данном примере дискриминатор также состоит из полносвязных слоев с функцией активации LeakyReLU.
– Финальный слой дискриминатора использует сигмоидную функцию активации для получения вероятности принадлежности изображения к классу "реальные".
5. Определение функций потерь и оптимизаторов:
– В данном примере используется функция потерь бинарной кросс-энтропии (`BinaryCrossentropy`).
– Оптимизаторы для генератора и дискриминатора – `Adam` с заданным коэффициентом обучения.
6. Обучение GAN (`train_gan`):
– На каждой итерации обучения:
– Генерируется случайный вектор шума из латентного пространства.
– Генератор создает синтетические изображения на основе этого шума.
– Из обучающего набора выбирается случайный батч реальных изображений.
– Собирается батч из реальных и сгенерированных изображений.
– Дискриминатор обучается на этом батче с метками "реальные" и "сгенерированные" соответственно.
– Генератор обучается на сгенерированном шуме с метками "реальные".
– Обучение происходит чередованием обучения дискриминатора и генератора, чтобы они соревновались друг с другом.
7. Обучение GAN:
– GAN собирается СКАЧАТЬ