С возвращением в серию Tensorflow !!

В этом руководстве мы исследуем нейронную сеть без учителя, которая называется Autoencoders. Те из вас, кто интересуется другими нашими интуитивно понятными руководствами по глубокому обучению, подписывайтесь на нас здесь. Также не забудьте подписаться на нашу рассылку, чтобы получать новости!

Итак, автокодеры - это глубокие нейронные сети, используемые для воспроизведения ввода на выходном слое, то есть количество нейронов в выходном слое точно такое же, как количество нейронов во входном слое. Рассмотрим изображение ниже

Это изображение представляет структуру типичного глубокого автоэнкодера. Цель архитектуры автоэнкодера - создать такое представление ввода на уровне вывода, чтобы оба были как можно ближе (похожи). Но на самом деле автокодеры используются для определения сжатой версии входных данных с наименьшим объемом потерь данных. Я имею в виду следующее: вы, должно быть, слышали о термине при разработке проектов машинного обучения, который называется анализ основных компонентов. Концепция PCA состоит в том, чтобы найти лучшие и релевантные параметры для обучения модели, в которой набор данных имеет огромное количество параметров.

Автоэнкодеры работают аналогичным образом. Часть архитектуры кодировщика разбивает входные данные на сжатую версию, гарантируя, что важные данные не будут потеряны, но общий размер данных значительно уменьшится. Эта концепция называется уменьшение размерности.

Обратной стороной этой концепции является то, что сжатые данные представляют собой черный ящик, т.е. мы не можем определить структуру данных в их сжатой версии. Имейте в виду, что предположим, что у нас есть набор данных с 5 параметрами, и мы обучаем автокодировщик по этим данным. Кодировщик не пропускает некоторые параметры для лучшего представления, но он объединяет параметры вместе, чтобы создать сжатую версию, но с меньшим количеством параметров (снижает количество параметров до 3 из 5).

Итак, автоэнкодер состоит из двух половин: кодировщика и декодера.

Кодер сжимает входные данные, а декодер делает обратное, чтобы создать несжатую версию данных, чтобы воссоздать входные данные с максимальной точностью.

Мы будем использовать Tensorflow, чтобы создать нейронную сеть автоэнкодера и протестировать ее на наборе данных mnist. Итак, приступим !!

Во-первых, мы импортируем соответствующие библиотеки и читаем в наборе данных mnist. Если набор данных присутствует на вашем локальном компьютере, хорошо, в противном случае он будет загружен автоматически, выполнив следующую команду

Затем мы создаем некоторые константы для нашего удобства, а также заранее объявляем нашу функцию активации. Изображения в наборе данных mnist имеют размер 28x28 пикселей, то есть 784 пикселя, и мы будем сжимать его до 196 пикселей. Вы всегда можете пойти глубже и еще больше уменьшить размер пикселя. Но слишком сильное сжатие может привести к потере информации автокодировщиком.

Теперь мы создаем переменные для весов и смещений для каждого слоя. И затем мы также создаем слои, используя ранее объявленную функцию активации.

tf.variance_scaling_initializer() обычно не используется. Но мы используем его здесь, потому что имеем дело с изменением размеров ввода. Таким образом, форма тензорного заполнителя (заполнитель для входного пакета) настраивается в соответствии с формой входного размера, что не позволяет нам столкнуться с какими-либо ошибками измерения. Скрытые слои создаются путем простой подачи предыдущего скрытого слоя в качестве входных данных с соответствующими весами и смещениями в функцию активации (ReLu).

Мы воспользуемся функцией потерь MSE для этой нейронной сети и передадим ее оптимизатору Adam. Вы всегда можете поиграть с ними для получения интересных результатов.

Теперь мы определяем количество эпох и размер пакета и запускаем сеанс. Мы используем служебные функции из mnist для получения каждой новой партии: mnist.train.next_batch(). Также мы будем выводить потерю обучения после каждой эпохи, чтобы отслеживать ее обучение.

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

Здесь мы видим, что реконструкции не идеальны, но довольно близки к исходным изображениям. Обратите внимание, реконструкция 2 выглядит как 3, это происходит из-за потери информации при сжатии.

Мы можем улучшить модель автоэнкодера, настроив гиперпараметры и, более того, обучив ее на ускорителе графического процессора.

Хорошо, это была глубокая (или составная) модель автоэнкодера, построенная с нуля на Tensorflow. Чтобы увидеть полный код, нажмите на баннер ниже. Следите за нашей публикацией, чтобы увидеть больше таких сообщений на нашей странице facebook.

До следующего раза!!

Подробнее из серии TensorFlow -