Если вы только недавно открыли для себя нейронные сети и собираетесь их изучать, то вы на правильном пути. Многие новички начинают погружаться в машинное обучение через Keras – открытую нейросетевую библиотеку, написанную на языке Python.
В сегодняшней статье мы рассмотрим, что представляет собой Keras, а также поговорим о таком понятии, как Deep Learning.
Что такое Keras
Keras – это библиотека для Python, позволяющая легко и быстро создавать нейронные сети. Она совместима с TensorFlow, Theano, Microsoft Cognitive Toolkit и MXNet. Первые две платформы наиболее используемы для разработки алгоритмов глубокого обучения, но довольно сложны в освоении. Keras же, напротив, представляет собой отличный вариант для тех, кто только начинает изучение нейронных сетей.
Создатель библиотеки Франсуа Шолле, инженер Google, разработал Keras для того, чтобы максимально упростить процесс создания нейронных сетей. Упор был на расширяемости, модульности и минимализме с поддержкой Python.
Разработка Keras позволила компании Google внести большой вклад в глубокое обучение и искусственный интеллект. Связано это в первую очередь с тем, что библиотека содержит современные алгоритмы, которые ранее были недоступны.
Из особенностей принято выделять следующие факторы:
- Удобство для пользователя. Keras был разработан для пользователей, а не для машин – он использует особые методы: предлагает согласованный и простой API, минимизирует количество действий пользователя, необходимых для решения распространенных задач. В случае возникновения ошибок всегда можно обратиться в поддержку за обратной связью.
- Модульность. Под этим мы понимаем последовательность или граф автономных, полностью сконфигурированных модулей, которые могут быть подключены без дополнительных ограничений. Например, это могут быть нейронные слои, функции ошибки, оптимизаторы, схемы инициализации, функции активации и схемы регуляризации – все эти модули можно комбинировать для создания модели.
- Расширяемость. Возможность легко добавлять новые классы, модули и функции делает Keras отличным средством для проведения различных исследований.
- Работа с Python. Все модели были написаны на языке программирования Python, поэтому код всегда компактен и легко читается.
Что такое глубокое обучение
Глубокое обучение (от англ. Deep learning) – это совокупность методов машинного обучения, позволяющая обучать модель и предсказывать результат по набору входных данных. Технология основана на искусственных нейронных сетях. Они получают алгоритмы обучения и объемы данных, которые постоянно растут для повышения эффективности обучения. Чем больше данных – тем эффективнее процесс.
Обучение называется глубоким, потому что со временем нейронная сеть покрывает все большее количество уровней. Подобный процесс состоит из двух фаз – обучения и формирования выводов. Первый рассматривается как способ маркировки больших объемов данных и определение их характеристик, которые в последующем сравниваются и запоминаются системой. Это необходимо для того, чтобы сделать правильные выводы, когда система повторно сталкивается с подобными данными.
Этапы глубокого обучения:
- Искусственные нейронные сети задают набор вопросов с вариантами ответов «Да» или «Нет».
- Происходит извлечение числовых значений из блоков данных.
- Данные классифицируются в соответствии с полученными ответами.
- Данные маркируются.
Когда происходит формирование выводов, система делает некоторые заключения, после чего маркирует неизученные данные, исходя из полученной ранее информации.
Появление глубокого обучения привело к значительным достижениям в области компьютерного зрения. Благодаря этому мы можем классифицировать изображения, находить в них объекты и отмечать их заголовками. Для этого глубокие нейронные сети со многими скрытыми слоями могут последовательно изучать более сложные функции из исходного входного изображения:
- первые скрытые слои могут изучать только локальные контуры,
- затем каждый последующий слой или фильтр изучает более сложные представления,
- последний слой может классифицировать изображение.
Эти типы глубоких нейронных сетей называются свёрточными нейронными сетями. Они представляют собой многослойные нейронные сети, которые предполагают, что входные данные являются изображениями.
Модели глубокого обучения в Keras
В основе Keras лежат модели, основной тип которых – последовательность, представляющая собой линейный стек слоев.
Суть в следующем: создается последовательность и к ней добавляются слои в том порядке, в котором нужно выполнить вычисления. После определения компилируется модель, использующая базовую платформу для оптимизации вычислений.
Далее модель должна соответствовать данным – это можно сделать по одной партии данных за один раз или запустив весь режим обучения модели. Когда обучение будет завершено, модель можно использовать для прогнозирования новых данных.
Также есть еще один тип моделей – это класс Model, используемый с функциональным API.
Как установить Keras
В установке нет ничего сложного, главное – чтобы был установлен один из движков. Рекомендую попробовать TensorFlow. Подробнее на нем останавливаться не будем, его инсталляция отлично описана на официальном сайте.
Также вам могут потребоваться следующие компоненты:
- cuDNN – требуется, если необходимо проводить расчеты с использованием GPU;
- HDF5 и h5py – предназначены для сохранения моделей Keras на диск;
- graphviz и pydot – используются утилитами визуализации для построения графов моделей.
После этого можно переходить к установке Keras, сделать это можно с помощью одной команды:
pip install keras
Альтернативная команда – установка из репозитория GitHub. Для начала потребуется сделать клон:
git clone https://github.com/keras-team/keras.git
Затем перейдите в папку, где находится библиотека и воспользуйтесь командой:
cd keras sudo python setup.py install
Работа с Keras на примере
Рассмотрим работу Keras с движком TensorFlow на примере базовых операций: загрузки набора данных, построения модели, добавления параметров, компиляции, тренировки и оценки. С их помощью мы создадим собственный классификатор рукописных цифр на основе набора данных MNIST.
Шаг 1: Используем набор помеченных данных
В Keras много помеченных наборов данных, которые можно импортировать. В нашем случае нам потребуется MNIST, загрузить который можно следующим образом:
from Keras.datasets import mnist (X_train, y_train), (X_test, y_test) = mnist.load_data()
Шаг 2: Загружаем необходимые слои
Keras включает в себя большое количество слоев и параметров: функции потерь, оптимизаторы, метрики оценки и прочее. Они используются для создания, настройки, тренировки и оценки нейронных сетей.
Нам потребуются следующие слои:
from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from keras.layers import Flatten from keras.optimizers import Adam from keras.utils import np_utils
Также для классификатора используем свёрточную нейронную сеть:
from keras.layers.convolutional import Conv2D from keras.layers.convolutional import MaxPooling2D
Шаг 3: Используем метод предварительной обработки данных
Будем использовать метод Keras.np_utils.to_categorical() для унитарной кодировки y_train и y_test. Выглядит он следующим образом:
# меняем размерность
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], X_train.shape[2], 1).astype('float32') X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], X_test.shape[2], 1).astype('float32') # нормализуем и получаем данные от 0 до 1 X_train/=255 X_test/=255 number_of_classes = 10 y_train = np_utils.to_categorical(y_train, number_of_classes) y_test = np_utils.to_categorical(y_test, number_of_classes)
Шаг 4: Используем метод add()
Для добавления импортированных слоев воспользуемся методом add():
model = Sequential() model.add(Conv2D(32, (5, 5), input_shape=(X_train.shape[1], X_train.shape[2], 1), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(32, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(number_of_classes, activation='softmax')
Шаг 5: Используем метод compile()
Данный метод предназначен для процесса обучения:
model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])
Шаг 6: Используем метод fit()
Тренировку выполним с помощью метода fit():
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=5, batch_size=200)
Выглядит тренировка следующим образом:
Шаг 7: Оцениваем модель
Следующий этап после тренировки – проверка результатов на новых данных либо с помощью методов predict_classes() или evaluate(). Возьмем в качестве примера изображение:
Первым делом конвертируем его в нужный нам формат набора – MNIS. Затем попробуем распознать:
import cv2 img = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE) resized = cv2.resize(img, (28,28), interpolation = cv2.INTER_AREA) img = np.resize(resized, (28,28,1)) im2arr = np.array(img) im2arr = im2arr.reshape(1,28,28,1) y_pred = model.predict_classes(im2arr) print(y_pred) В результате получаем число «7».
Шаг 8: Сохраняем модель
Как я уже говорил ранее, Keras является модульным – таким образом, мы можем сохранить модель и использовать ее в последующем:
model.save('model.h5')
Вот такими несложными действиями у нас получилось создать классификатор рукописных цифр – в этом и есть прелесть Keras. Это отличное решение для тех, кто только-только начинает вникать в нейронные сети и хочет поближе познакомиться с глубоким обучением.
Комментарии
Известный поисковик - тоже сервис, и там понятно, что с его помощью можно сделать.