Как мы все знаем, с помощью библиотеки Keras-Python можно быстро и легко создавать собственные модели глубокого обучения.Сегодня мы представим некоторые из наших часто используемых функций API.
Sequential API позволяет вам строить модели слой за слоем для большинства задач. Его ограничение заключается в том, что он не позволяет создавать общие слои или модели с несколькими входами или выходами.
Функции API в Keras — это альтернатива созданию более гибких моделей, которые также включают в себя создание более сложных моделей.
В этом сообщении блога вы узнаете, как определять модели глубокого обучения в Keras, используя гибкие функции API.
После прочтения вы узнаете:
1. Разница между непрерывным API и функциями API.
2. Как определить модели простого многослойного персептрона, сверточной нейронной сети и рекуррентной нейронной сети с использованием функций API.
3. Как определить более сложные модели с общими слоями и несколькими входами и выходами.
Хорошо, давайте начнем.
Обзор учебника
Этот урок разделен на 6 частей:
1. Последовательная модель Кераса.
2. Модель функциональной функции Кераса.
3. Стандартная сетевая модель.
4. Модель общего слоя.
5. Несколько моделей ввода и вывода.
6. Лучшая практика.
1.Kerasпоследовательная модель
Keras предоставляет API для последовательных моделей.
Это один из способов создания модели глубокого обучения, когда создается экземпляр класса Sequential, а также создается и добавляется к нему слой модели.
Например, слои можно определить и передать в Sequential как массив:
Слои также можно добавлять сегментами:
Sequential Model API в большинстве случаев отлично подходит для разработки моделей глубокого обучения, но есть некоторые ограничения. Например, он не может определить модель с несколькими различными входными источниками, так как это создаст несколько выходных целей.
2.Kerasфункциональная модель
Функциональный API Keras предоставляет более гибкий способ определения моделей.
Это позволяет вам определять несколько входных или выходных моделей и моделей, которые могут совместно использовать слои. Помимо прочего, он позволяет определять временные ациклические сетевые графы.
Модели определяются путем создания экземпляров слоев и прямого соединения их друг с другом парами, а затем определения модели с указанными слоями в качестве входных и выходных данных модели.
Давайте рассмотрим три уникальных аспекта функционального API Keras:
2.1определить ввод
В отличие от последовательных моделей, вы должны создать и определить отдельный входной слой, который задает форму входных данных.
Входной слой принимает параметр модели, который представляет собой кортеж, представляющий размерность входных данных.
Когда входные данные являются одномерными, например, с многослойным персептроном, модель должна явно исключать форму размера мини-пакета, используемого при обучении сети разделению данных. Поэтому кортежи моделей всегда определяются в последнем измерении (2), которое висит, например:
from keras.layers import Input
visible = Input(shape=(2,))
2.2соединительный слой
Слои в модели можно соединять попарно, указывая, откуда поступают входные данные при определении каждого нового слоя. Используйте обозначение в квадратных скобках, чтобы после создания слоя ввод из текущего слоя указывался на входящий слой.
Проиллюстрируем это на простом примере. Мы можем создать входной слой, как указано выше, а затем создать скрытый слой как плотный слой, который получает входные данные только от входного слоя.
Именно благодаря такому способу соединения слоев функциональный API становится более гибким. Вы можете видеть, как легко становится начать определять специальную графику для специальных слоев.
2.3Создать модель
После того, как все слои, необходимые для модели, созданы и соединены вместе, следует определить модель. Подобно Sequential API, эту модель можно обрисовать в общих чертах, подогнать, оценить и использовать для прогнозирования.
Keras предоставляет класс Model, который вы можете использовать для создания моделей из созданных вами слоев. Это требует, чтобы вам нужно было указать входной и выходной слои. Например:
Теперь, когда мы знаем все ключевые части функционального API Keras, давайте применим наши знания на практике, определив другой набор моделей.
Каждый из следующих примеров является исполняемым и печатает структуру и создает диаграмму. Я рекомендую сделать это для вашей собственной модели, это прояснит ваше определение.
Я надеюсь, что эти примеры послужат вам шаблонами для определения собственных моделей позже с использованием функционального API.
3.Стандартная сетевая модель
Приступая к использованию функционального API, полезно знать некоторые определения стандартных моделей нейронных сетей. В этом разделе мы представим определение простого многослойного персептрона, сверточной нейронной сети и рекуррентной нейронной сети.
Эти примеры заложат основу для понимания более подробных примеров позже.
3.1многослойный персептрон
В этом разделе мы определяем многоуровневую модель персептрона для бинарной классификации. Модель имеет 10 входов, 3 скрытых слоя, 10 нейронов и выходной слой имеет 1 выход. Выпрямленная линейная функция активации используется в каждом скрытом слое, а сигмовидная функция активации используется в выходном слое для двоичной классификации.
Запуск примера выводит структуру сети:
Создание схемы модели и сохранение в файл:
3.2Сверточная нейронная сеть
В этом разделе мы определим сверточную нейронную сеть для классификации изображений.
Модель получает черно-белые изображения 64×64 в качестве входных данных, затем последовательность из двух сверточных слоев и объединенных слоев в качестве экстракторов признаков, за которыми следуют полностью связанные слои для интерпретации признаков, а выходной слой представляет собой сигмовидную функцию активации.
Запустите пример:
Схема схемы модели создается и сохраняется в файл:
3.3Рекуррентная нейронная сеть
В этом разделе мы определим рекуррентную нейронную сеть LSTM для классификации последовательностей.
Модель имеет 100 временных шагов в качестве входных данных, модель имеет один скрытый слой LSTM для извлечения функций из последовательности, затем полностью подключенный слой для интерпретации выходных данных LSTM, за которым следует выходной слой для создания двоичных прогнозов.
Выполнение примера суммирует слои модели.
Создание схемы модели и сохранение в файл:
4.Модель общего слоя
Несколько слоев могут совместно использовать выходные данные одного слоя.
Например, может быть несколько разных слоев извлечения признаков из входных данных или несколько слоев, используемых для интерпретации выходных данных слоя извлечения признаков.
Давайте посмотрим на эти два примера.
4.1общий входной слой
В этом разделе мы определяем несколько сверточных слоев с ядрами разного размера для интерпретации входных данных изображения.
На вход модели подается черно-белое изображение размером 64×64 пикселя. Есть две подмодели извлечения признаков CNN, которые совместно используют этот ввод: первая имеет размер ядра 4, а вторая имеет размер ядра 8. Выходные данные этих подмоделей извлечения признаков выравниваются в векторы, объединяются в длинный вектор и передаются на полносвязный слой для двоичной классификации перед окончательным выходным слоем.
Выполнение примера суммирует слои модели.
Схемы моделей создаются и сохраняются в файл:
4.2 Слой извлечения общих признаков
В этом разделе мы интерпретируем выходные данные экстрактора признаков LSTM для классификации последовательностей с использованием двух параллельных подмоделей.
Входными данными для модели является временной шаг из 100 признаков, а слой LSTM с 10 ячейками памяти интерпретирует последовательность. Первый режим интерпретации представляет собой неглубокий однослойный полносвязный слой, а второй — глубокую трехслойную модель. Выходные данные обеих объяснительных моделей объединяются в длинный вектор, который передается на выходной уровень для создания бинарных прогнозов.
Выполнение примера суммирует слои модели.
Схемы моделей создаются и сохраняются в файл.
5.Несколько моделей ввода и вывода
Функциональный API также можно использовать для разработки более сложных моделей с несколькими входными данными, возможно, с разными модальностями. Его также можно использовать для разработки моделей, которые производят несколько выходных данных.
Мы рассмотрим каждый пример в этом разделе.
5.1Модель с несколькими входами
Мы разработаем модель классификации изображений, которая принимает в качестве входных данных две версии изображения, каждая из которых имеет разный размер. В частности, черно-белая версия 64×64 и цветная версия 32×32. Для каждой модели запускаются отдельные модели извлечения признаков CNN, а затем результаты двух моделей объединяются для интерпретации и окончательного прогноза.
Обратите внимание, что при создании экземпляра Model() мы определили два входных слоя как массивы.
model = Model(inputs=[visible1, visible2], outputs=output)
Полный пример показан ниже.
Запустите пример.
Создание схемы модели и сохранение в файл:
6.лучшая практика
В этом разделе я дам вам несколько советов по максимально эффективному использованию функционального API при определении ваших собственных моделей.
1.согласованное имя переменной. Используйте одни и те же имена переменных для входного (видимый) и выходного слоев (выходной), даже для скрытых слоев (скрытый1, скрытый2). Это поможет правильно соединить вещи.
2.Посмотреть карту слоя. Всегда распечатывайте сводки моделей и просматривайте выходные данные слоя, чтобы убедиться, что модели связаны друг с другом должным образом.
3.Посмотреть диаграмму. Создайте график диаграммы модели и проверьте его, чтобы убедиться, что все собрано так, как вы задумали.
4.Назовите слой. Вы можете присвоить имена именам диаграмм модели просмотра и слоям, используемым при рисовании. Например: Dense(1, name='hidden1').
5.отдельная подмодель. Рассмотрите возможность разделения разработки подмоделей и объединения подмоделей вместе.
7.дальнейшее чтение
Если у вас есть более глубокое понимание этого, этот раздел содержит больше ресурсов по этой теме.
1.API последовательной модели.
2.Начало работы с моделями Keras Sequential.
3.Начало работы с функциональным API Keras.
Информация об авторе:Доктор Джейсон Браунли — специалист по машинному обучению и академический исследователь, помогающий разработчикам начать работу с машинным обучением.
Эта статья написанаСообщество Alibaba Cloud YunqiОрганизация переводов.
Оригинальное название статьи "keras-functional-api-deep-learning"
Автор: д-р Джейсон Браунли Переводчик: Tiger Talks
Статья является упрощенным переводом, для более подробной информации, пожалуйста, проверьтеоригинальный