Люди очень хорошо распознают вещи, а также создают новые вещи. Так долго мы работали над обучением компьютеров имитации человеческой способности распознавать вещи, но способность создавать новые вещи долгое время ускользала от систем искусственного интеллекта. Так было до 2014 года, когда Ян Гудфеллоу изобрел генеративные состязательные сети. В этом посте мы рассмотрим базовый обзор генерирующих состязательных сетей и будем использовать их для генерации изображений определенных цифр.

Обзор генерирующих состязательных сетей

Представьте, что вы художник, пытающийся нарисовать очень реалистичную картину Обамы, которая заставит судью думать, что это реальная картина. В первый раз, когда вы сделаете это, судья легко обнаружит, что ваша фотография поддельная, а затем вы попытаетесь снова и снова, пока судья не будет обманут, придя к выводу, что фотография настоящая. Генеративная состязательная сеть работает таким образом, она состоит из двух моделей,

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

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

Ниже приведены образцы, созданные генератором GAN.

GAN делятся на два общих класса: безусловные GAN, которые случайным образом генерируют любой класс изображений, и условные GAN, которые генерируют определенные классы. В этом руководстве мы будем использовать условные ганы, поскольку они позволяют нам указать, что мы хотим сгенерировать.

Настройка инструментов

Обучение GAN обычно сложно, но благодаря Torchfusion, исследовательской структуре, построенной на PyTorch, этот процесс будет очень простым и понятным.

Установите Torchfusion через PyPi

pip3 install torchfusion

Установите PyTorch

Если у вас еще не установлен torchfusion, перейдите на pytorch.org, чтобы получить последние установочные двоичные файлы PyTorch.

Теперь вы полностью настроены!

Затем импортируйте пару классов.

Определите генераторную сеть и дискриминатор

Выше мы указываем разрешение создаваемых изображений как 1 x 32 x 32.

Настройте оптимизаторы для моделей генератора и дискриминатора.

Теперь нам нужно загрузить набор данных, из которого мы попытаемся извлечь образцы. В этом случае мы будем использовать MNIST.

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

А теперь мы можем вызвать функцию поезда для обучения двух моделей.

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

Вот полный код

После всего 20 эпох обучения это сгенерирует изображение ниже:

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

В приведенном ниже коде мы сгенерировали новое изображение цифры 6, вы можете указать любую цифру от 0 до 9.

Результат:

Генеративные состязательные сети - это захватывающая область исследований, torchfusion делает ее очень простой с хорошо оптимизированными реализациями лучших алгоритмов GAN.

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

Официальный репозиторий Torchfusion: https://github.com/johnolafenwa/TorchFusion.

Учебные пособия и документация по TorchFusion доступны по адресу https://torchfusion.readthedocs.io.

Вы всегда можете связаться со мной в твиттере через @johnolafenwa