Создание автокодировщика для восстановления изображений с использованием набора данных Fashion-MNIST
Эта статья написана для людей, которые хотят создать базовый автокодировщик с помощью PyTorch. Набор данных, на котором основана эта статья, - это набор данных Fashion-MNIST.
Статья разделена на следующие разделы:
- Введение в автоэнкодеры.
- Загрузка набора данных.
- Построение архитектуры нейронной сети.
- Обучение нейронной сети.
- Визуализация в Tensorboard.
1. Представляем автоэнкодеры
Как определено в Википедии:
Автоэнкодер - это тип нейронной сети, используемый для неконтролируемого обучения эффективному кодированию данных.
Другими словами, цель автокодировщика - изучить более низкое представление набора данных, которое, среди прочего, полезно для извлечения функций, уменьшения размерности и шумоподавления изображений. Его архитектура состоит из кодировщика, который сжимает ввод в представление скрытого пространства, также известного как узкое место, и декодера, который восстанавливает ввод из представления скрытого пространства.
2. Загрузка набора данных
Чтобы продемонстрировать, как построить автоэнкодер в PyTorch, я выбрал хорошо известный набор данных Fashion-MNIST.
Fashion-MNIST - это набор изображений статей Zalando, состоящий из обучающего набора из 60 000 примеров и тестового набора из 10 000 примеров. Каждый пример представляет собой изображение в оттенках серого 28x28, связанное с меткой из 10 классов. Мы намерены использовать Fashion-MNIST в качестве прямой замены исходному набору данных MNIST для тестирования алгоритмов машинного обучения. Он имеет одинаковый размер изображения и структуру разделов для обучения и тестирования.
Во-первых, для запуска остальной части кода необходимо установить и импортировать следующие библиотеки.
Чтобы запустить показанный ниже код, необходимо загрузить следующие файлы. После загрузки данных найдите их в папке с именем data и запустите следующий код.
После загрузки убедитесь, что train_x имеет форму (1000, 28, 28), а test_x - (100, 28, 28). Впоследствии нормализуйте данные в диапазоне [0, 1].
Наконец, измените массивы в соответствии с формой, необходимой PyTorch для сверточных слоев (train_x: (1000, 1, 28, 28) и test_x: (100, 1, 28, 28)), разделите массив train_x на наборы для обучения и проверки и загрузите три набора в PyTorch Dataloaders.
3. Построение архитектуры нейронной сети.
Как упоминалось выше, автоэнкодер состоит из кодировщика и декодера. Несмотря на возможность использования полностью связанных слоев после выравнивания входного изображения, я решил использовать сверточные слои как для кодировщика, так и для декодера.
4. Обучение нейронной сети.
Для обучения нейронной сети вы можете запустить следующий код. Помимо обучения и оценки набора проверки, он также сохранит файл журнала, который впоследствии можно будет загрузить в Tensorboard.
5. Визуализация на Tensorboard
Файл журнала можно открыть в Tensorboard, выполнив следующую команду в терминале: tensorboard --logdir logs/ --port 8080
Потеря обучения и потеря проверки показаны на следующих рисунках.
Для скорости обучения я установил экспоненциальный спад, который следует следующей математической формуле: lr = lr0 * e^(−kt)
, где lr
, k
- гиперпараметры (k = 0,999), а t
- номер итерации (номер эпохи).
Вот четыре изображения проверочного набора:
Следующие изображения отображают выходные данные автокодировщика через 1, 125 и 250 эпох. Мы можем наблюдать, как через 125 эпох автоэнкодер может точно восстанавливать исходные изображения.
Наконец, вот восемь реконструированных изображений тестовой выборки.
Большое спасибо за чтение, и я надеюсь, что эта статья вам помогла!