Особенности Keras / keras 8

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

Что такое Keras?

Keras — это библиотека нейронной сети в Python, использующая в качестве бэкенда TensorFlow, Microsoft CNTK или Theano. Ее можно установить вместе с движком с помощью PyPl.

pip install Keras
pip install tensorFlow

Зачем учить Keras?

Keras делает акцент на пользовательском опыте. С ее помощью пользователь может писать минимум кода для выполнения основных операций. Библиотека модульная и расширяемая. Модели и части кода можно использовать повторно и расширять в будущем.

Особенности Keras

Рассмотрим главные особенности Keras, из-за которых ее стоит учить:

1. Наборы помеченных данных

В Keras много помеченных наборов данных, которые можно импортировать и загрузить.

Пример: классификация небольших изображений CIFAR10, определение тональности рецензий IMDB, классификация новостных тем Reuters, рукописные цифры MNIST и некоторые другие (это лишь примеры самых известных наборов).

Для загрузки набора 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

Keras также поддерживает одно- и двухмерные сверточные и рекуррентные нейронные сети. Для классификатора используем сверточную нейронную сеть (слой Conv2D).

from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D

3. Методы для предварительной обработки данных

В Keras также масса методов для предварительной обработки. Будем использовать метод 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() в Keras

Для добавления импортированных слоев используется метод 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()

Перед тренировкой нужно настроить процесс обучения, что делается с помощью метода compile().

model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])

6. Метод fit()

Тренировка моделей Keras происходит с помощью массивов и метода fit().

model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=5, batch_size=200)

Тренировка занимает некоторое время. В данном случае прошло всего 5 epocs, но их число можно увеличить.

Тренировка выглядит вот так:

Тренировка моделей Keras

7. Оценка модели

После тренировки модели результаты проверяются на новых данных или с помощью predict_classes() или evaluate().

Проверим модель рукописных цифр. Можете взять в качестве примера это изображение.
Пример цифры

Но сперва его нужно конвертировать в формат набора MNIST.

Этот формат представляет собой черно-белые изображения 28*28*1.

import cv2
img = cv2.imread('image.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. Рассмотрели их на примере базовых операций: загрузки набора данных, построения модели, добавления параметров, компиляции, тренировки и оценки. С помощью этой статьи у вас была возможность создать собственный классификатор рукописных цифр на основе набора данных MNIST. Этот пример показывает, что проекты глубокого обучения могут состоять всего из 10 строк кода.

Максим
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: Почта
admin@pythonru.comAlex Zabrodin2018-10-26OnlinePython, Programming, HTML, CSS, JavaScript