Как использовать библиотеку Keras Deep Learning

Keras - это высокоуровневый API нейронных сетей, способный работать поверх Tensorflow, Theano и CNTK. Он позволяет быстро экспериментировать с помощью высокоуровневого, удобного, модульного и расширяемого API. Keras также можно запускать как на CPU, так и на GPU.

Keras был разработан и поддерживается Francois Chollet и является частью ядра Tensorflow, что делает его предпочтительным высокоуровневым API для Tensorflow.

Эта статья - первая из небольшой серии, в которой объясняется, как использовать Keras для глубокого обучения.

В этой статье мы рассмотрим основы Keras, включая две наиболее часто используемые модели Keras (Sequential и Functional), основные уровни, а также некоторые функции предварительной обработки.

Установка Кераса

Я предполагаю, что у вас уже есть работающая установка Tensorflow, Theano или CNTK. Если вы не просмотрите ссылки выше.

Keras можно установить с помощью pip или conda:

pip install keras
or
conda install keras

Загрузка набора данных

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

В этой статье мы будем использовать набор данных MNIST «», который содержит 70000 изображений в оттенках серого 28x28 с 10 различными классами. Керас разделяет его на обучающий набор с 60000 экземплярами и тестовый набор с 10000 экземплярами.

Чтобы передать изображения в сверточную нейронную сеть, мы преобразуем фрейм данных в четыре измерения. Это можно сделать с помощью метода numpys reshape. Мы также преобразуем данные в числа с плавающей запятой и нормализуем их.

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

Создание модели с последовательным API

Самый простой способ создать модель в Keras - использовать последовательный API, который позволяет накладывать один слой за другим. Проблема с последовательным API заключается в том, что он не позволяет моделям иметь несколько входов или выходов, которые необходимы для некоторых проблем.

Тем не менее, последовательный API - идеальный выбор для большинства проблем.

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

Приведенный выше код первым из создает объект Sequential и добавляет несколько сверточных, maxpooling и dropout слоев. Затем он сглаживает вывод и передает ему два последнего плотного и выпадающего слоя, прежде чем передать его нашему выходному слою. Если вы не уверены в создании сверточной нейронной сети (CNN), ознакомьтесь с этим замечательным руководством.

Последовательный API также поддерживает другой синтаксис, в котором слои напрямую передаются конструктору.

Создание модели с помощью функционального API

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

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

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

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

Скомпилировать модель

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

Функция потерь - это мера того, насколько хорошо наша модель достигает поставленной цели.

Оптимизатор используется для минимизации функции потерь (целевой) путем обновления весов с использованием градиентов.

Дополнение данных изображения

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

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

Это ImageDataGenerator создаст новые изображения, которые были повернуты, увеличены или уменьшены, а также сдвинуты по ширине и высоте.

Подобрать модель

Теперь, когда мы определили и скомпилировали нашу модель, она готова для обучения. Для обучения модели мы обычно используем метод fit, но поскольку мы используем генератор данных, мы будем использовать fit_generator и передать ему наш генератор, данные X, данные y, а также количество эпох и размер пакета. Мы также передадим ему набор проверки, чтобы мы могли отслеживать потери и точность для обоих наборов, а также step_per_epoch, который требуется при использовании генератора и просто устанавливается равным длине обучающего набора, деленной на batch_size.

Это выводит:

Epoch 1/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.1037 - acc: 0.9741 - val_loss: 0.0445 - val_acc: 0.9908
Epoch 2/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.0879 - acc: 0.9781 - val_loss: 0.0259 - val_acc: 0.9937
Epoch 3/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.0835 - acc: 0.9788 - val_loss: 0.0321 - val_acc: 0.9926
Epoch 4/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.0819 - acc: 0.9792 - val_loss: 0.0264 - val_acc: 0.9936
Epoch 5/5
1875/1875 [==============================] - 22s 12ms/step - loss: 0.0790 - acc: 0.9790 - val_loss: 0.0220 - val_acc: 0.9938

Визуализация тренировочного процесса

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

На графиках выше мы видим, что наша модель не переоснащается, и что мы могли бы обучать больше эпох, потому что потери при проверке все еще уменьшаются.

Рекомендуемая литература



Заключение

Keras - это высокоуровневый API нейронных сетей, способный работать поверх Tensorflow, Theano и CNTK. Он обеспечивает быстрое экспериментирование с помощью высокоуровневого, удобного, модульного и расширяемого API, а также работы на ЦП и ГП.

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

Если вам понравилась эта статья, подпишитесь на мой Youtube канал и подпишитесь на меня в социальных сетях.

Код, описанный в этой статье, доступен как репозиторий Github.

Если у вас есть какие-либо вопросы, рекомендации или критические замечания, со мной можно связаться через Twitter или в разделе комментариев.