Vae-Fashion-Mnist
Описание
Лабораторная работа №4: Генерация изображений с использованием вариационного автоэнкодера (VAE) на датасете Fashion-MNIST. Полная реализация на TensorFlow/Keras с визуализациями и анализом латентного пространства.
Языки
- Python100%
Лабораторная работа №4: Генерация изображений с использованием вариационного автоэнкодера (VAE)
1. Цель работы
- Практическое освоение принципов работы вариационного автоэнкодера (VAE) и его отличий от обычных автоэнкодеров.
- Изучение концепции латентного пространства и его свойств (интерполяция, семантическая организация).
- Получение навыков работы с вероятностными моделями и reparameterization trick.
- Освоение методов оценки качества генеративных моделей.
2. Теоретическое введение
Вариационный автоэнкодер (VAE) — это генеративная модель, которая учится параметризовать распределение данных. В отличие от обычного автоэнкодера, энкодер VAE предсказывает параметры распределения (μ и σ) в латентном пространстве, а не конкретные точки. Это позволяет генерировать новые данные, сэмплируя из латентного пространства.
3. Датасет
Использовался датасет Fashion-MNIST, содержащий 70 000 изображений одежды (60 000 тренировочных, 10 000 тестовых) размером 28x28 пикселей в 10 классах.
4. Предобработка данных
- Нормализация значений пикселей в диапазон [0, 1].
- Добавление размерности канала (для сверточных слоев).
5. Архитектура модели
Модель состоит из энкодера и декодера. Энкодер преобразует входное изображение в параметры латентного распределения (z_mean, z_log_var), а затем с помощью reparameterization trick получается латентный вектор z. Декодер восстанавливает изображение из латентного вектора.
Энкодер
Input(28, 28, 1) Conv2D(32, 3, strides=2, padding='same', activation='relu') Conv2D(64, 3, strides=2, padding='same', activation='relu') Flatten() Dense(16, activation='relu') Dense(latent_dim) -> z_mean Dense(latent_dim) -> z_log_var Sampling -> z

Декодер
Input(latent_dim) Dense(7764, activation='relu') Reshape((7, 7, 64)) Conv2DTranspose(64, 3, strides=2, padding='same', activation='relu') Conv2DTranspose(32, 3, strides=2, padding='same', activation='relu') Conv2DTranspose(1, 3, padding='same', activation='sigmoid')

6. Гиперпараметры обучения
- Оптимизатор: Adam
- Learning rate: 0.001
- Размер батча: 128
- Количество эпох: 30
- Размер латентного пространства: 2 (для визуализации)

Начало

Начало

7. Графики обучения
График 01

График 02

8. Результаты
Визуализация латентного пространства

Figure_1

Figure_2

Генерация новых изображений

Интерполяция

9. Выводы
9.1. КАЧЕСТВО РЕКОНСТРУКЦИИ:
- VAE успешно научился восстанавливать изображения одежды из Fashion-MNIST.
- Реконструкции получаются слегка размытыми, что характерно для VAE и является следствием регуляризации через KL-дивергенцию.
- Более высокие ошибки реконструкции наблюдаются для сложных классов (например, "рубашка") которые имеют большую вариативность.
9.2. ЛАТЕНТНОЕ ПРОСТРАНСТВО (при latent_dim=2):
- Пространство организовано семантически: похожие классы расположены близко друг к другу.
- Классы частично перекрываются из-за малой размерности латентного пространства.
- KL-дивергенция успешно регуляризирует пространство, приближая его к N(0, I).
9.3. ГЕНЕРАТИВНЫЕ ВОЗМОЖНОСТИ:
- Модель способна генерировать новые правдоподобные изображения при сэмплировании из N(0, I).
- Интерполяция в латентном пространстве демонстрирует плавные семантические переходы. 2D манифолд показывает непрерывность пространства и вариативность генерируемых объектов.
9.4. ОГРАНИЧЕНИЯ И ВОЗМОЖНЫЕ УЛУЧШЕНИЯ:
- При latent_dim=2 модель имеет ограниченную способность к точной реконструкции.
- Увеличение latent_dim до 32-64 улучшит качество, но усложнит визуализацию. Добавление большего количества слоев и нейронов в энкодере/декодере может улучшить качество. Использование более продвинутых архитектур (например, Residual VAE) или функций потерь (perceptual loss) может дать лучшие результаты. Для Fashion-MNIST можно использовать больше эпох обучения (50-100).
9.5. ПРАКТИЧЕСКАЯ ПОЛЬЗА:
- VAE может использоваться для генерации новых дизайнов одежды.
- Латентные представления могут служить признаками для задач классификации.
- Интерполяция позволяет создавать промежуточные стили одежды. История обучения сохранена в: results/training_history.npy Метрики сохранены в: results/performance_metrics.npy Ошибка при сохранении: The filename must end in .weights.h5'. Received: filepath=vae_model/fashion_mnist_vae.h5 Продолжение без сохранения ...
10. Ссылки
- Notebook с экспериментом
- Notebook с экспериментом
- Исходный код: main.py