Создание автокодировщика для восстановления изображений с использованием набора данных Fashion-MNIST

Эта статья написана для людей, которые хотят создать базовый автокодировщик с помощью PyTorch. Набор данных, на котором основана эта статья, - это набор данных Fashion-MNIST.

Статья разделена на следующие разделы:

  1. Введение в автоэнкодеры.
  2. Загрузка набора данных.
  3. Построение архитектуры нейронной сети.
  4. Обучение нейронной сети.
  5. Визуализация в 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 эпох автоэнкодер может точно восстанавливать исходные изображения.

Наконец, вот восемь реконструированных изображений тестовой выборки.

Большое спасибо за чтение, и я надеюсь, что эта статья вам помогла!