Как использовать сохраненную нейросеть

0
20

Как начать работу с Keras, Deep Learning и Python

Классы датасетов

Метод float преобразует логические значения оператора меньше в вещественные числа (0.0 или 1.0). Затем при помощи view превращаем Y в матрицу из одного столбика (в котором находится 0 или 1). По строчкам идут классы примеров.

Ключевое отличие «Шедеврума» от конкурентов в том, что это не просто сервис для генерации картинок, а полноценная соцсеть для нейрохудожников, напоминающая «Инстаграм». Здесь можно подписаться на пользователей, ставить лайки и оставлять комментарии под сгенерированными картинками. В сервисе также есть алгоритмическая лента, которая предлагает интересные посты.

Различий в результатах в зависимости от языка нет. Но стоит помнить, что нейросеть обрабатывает запрос через перевод на английский. Это может быть важно, если у слов в запросе есть несколько вариантов перевода: «площадь» и «квадрат» — square, «ногти» и «гвозди» — nails. Результат может быть неожиданным.

При проектировании сложных нейронных сетей, их архитектуру удобнее задавать в функциональном виде.
Для этого создаётся наследник класса nn.Module. В нём переопределяется конструктор и метод forward. В конструкторе задаются необходимые слои и инициализируются их параметры. Обратим внимание на вызов конструктора предка которому необходимо передать имя нашего класса. В методе forward (прямое распространение) строится архитектура сети (слои связываются в вычислительный граф):

Большинство учебных пособий по Keras основаны на работе со стандартными датасетами, такими как MNIST (распознавание рукописного ввода цифр) или CIFAR-10 (распознавание базовых объектов). Они помогут вам начать использовать Keras, но не смогут научить работать с собственными наборами изображений — вы просто будете вызывать вспомогательные функции для загрузки предварительно скомпилированных датасетов.

Для начала отметим, что MNIST и CIFAR-10 представляют собой не самые интересные примеры. Вы не научитесь работать со своими данными, а будете пользоваться встроенными утилитами Keras, которые волшебным образом превращают датасеты MNIST и CIFAR-10 в массивы NumPy. Даже обучающую и тестовую выборку уже сделали за вас!

В статье мы рассмотрим 4 .py файла. Начнём с обучения простой модели с помощью скрипта train_simple_nn.py . Далее перейдём к обучению SmallVGGNet, используя скрипт train_vgg.py . SmallVGGNet.py содержит класс SmallVGGNet (свёрточную нейронную сеть). Но что хорошего в сериализованной модели, если мы не можем её применить? В predict.py находится образец кода для загрузки модели и файла метки для распознавания изображений. Этот скрипт понадобится только после того, как мы успешно обучим модель с достаточной точностью. Всегда полезно запускать его для проверки модели на изображениях, которые не содержатся в исходных данных.

Специально для тех, кто только начинает осваивать Deep Learning и нейронные сети, мы подготовили перевод очень полезной статьи. Из неё вы узнаете, как использовать библиотеку Keras для обучения своей первой нейронной сети с собственным набором изображений, а также сможете создать свёрточную нейронную сеть (CNN).

Какие результаты получаются в «Шедевруме»

Чаще всего к тексту будет предложено несколько вариантов обложки. Правда, они редко соответствуют написанному, хотя иногда перекликаются с запросом или заголовком текста. Откуда алгоритм берет предложенные изображения, неизвестно. Но если пролистать галерею до конца, будет возможность сгенерировать свой вариант картинки или опубликовать произведение без обложки.

ЧИТАТЬ ТАКЖЕ:  Как сгенерировать логотип в нейросети

Через минуту приложение выдаст текст и предложит выбрать к нему обложку. Отредактировать текст нельзя, можно только сгенерировать заново, при необходимости поправив запрос. За это отвечает иконка с карандашом. Можно добавить к тексту хэштеги или вовсе удалить результат.

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

В отличие от большинства аналогичных сервисов, «Шедеврум» хорошо понимает русскоязычные запросы и учитывает их при генерации. «Фильтрумы» позволяют перерисовать изображение в одном из предустановленных стилей — например, сделать из фото картинку с вязаной игрушкой.

Как упоминалось ранее, мы работаем с датасетом Animals. Обратите внимание, как он расположен в дереве проекта. Внутри animals/ находятся каталоги трёх классов: cats/ , dogs/ , panda/ . В каждом из них содержится 1000 изображений, относящихся к соответствующему классу.

Вызов nn.Line(in_features, out_features) создаёт два экземпляра линейного полносвязного слоя fc1, fc2 (fully connected). Одновременно с этим задаются случайные значения их весов и смещений. Скобочный оператор fc1(x) в методе forward запускает вычисления внутри слоя и на выходе выдаёт результирующий тензор.

Наш набор данных

Простые нейронные сети с последовательной архитектурой можно создавать при помощи стопочного интерфейса. Например, двухслойная полносвязная сеть с двумя входами (nX=2 признака), одним (nY=1) сигмоидным выходом (2 класса) и пятью нейронами (nH=5) в скрытом слое имеет вид:

— установка Keras с TensorFlow. С помощью pip вы можете установить Keras и TensorFlow меньше, чем за две минуты. Ваш компьютер или устройство должно быть достаточно производительным. Поэтому не рекомендуются устанавливать эти пакеты на Raspberry Pi, хотя на таком миникомпьютере могут хорошо работать уже обученные и не слишком объёмные модели.

«Шедеврум» может не только генерировать картинки, но и стилизовать изображения, загруженные пользователем. Например, представить человека с фото в виде вязаной игрушки или сделать брутального кота романтичным. Для этого используют «фильтрумы» — обученные на конкретном стиле модели нейросети YandexART.

Для обучения сети необходимо создать функцию ошибки (то, что следует минимизировать) и оптимизатор (который будет минимизировать ошибку). Оптимизатору передаются параметры модели. В качестве ошибки выберем бинарную кросс-энтропию (BCELoss), а оптимизатором будет SGD (Stochastic Gradient Descent):

Слой Linear делает линейное преобразование входного тензора формы (N, nX), где N — число примеров. На выходе слоя получается тензор формы (N, nH), который пропускается через сигмоид (новые nH признаков). Второй слой даёт тензор (N, nY) от которого также берётся через сигмоид. Если его значение меньше 0.5 — это первый класс, если больше 0.5 — второй.

Функция fit делает проход по всем данным. Это называется эпохой обучения. Если параметр leran=True, то происходит обучение модели (изменение её параметров). Значение leran=False используется при оценке качества модели без её изменения. В качестве метрик качества используется средняя ошибка по всем примерам и средняя точность (доля правильно предсказанных классов). Обычно требуется достаточно много эпох обучения:

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь