Особенности 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 строк кода.

Появились вопросы? Задайте на Яндекс Кью

У блога есть сообщество на Кью >> Python Q <<. Там я и другие участники отвечаем на вопросы по python, программированию и контенту сайта.

Обучение Python и Data Science

Профессия Python-разработчик / Skillbox

Профессия Python-разработчик / Skillbox

7 313 2 925 ₽/мес.
Профессия Python Fullstack / Skillbox

Профессия Python Fullstack / Skillbox

6 569 2 627 ₽/мес.
Профессия Data Scientist / Skillbox

Профессия Data Scientist / Skillbox

9 187 3 675 ₽/мес.
Python-фреймворк на Django / Skillbox

Python-фреймворк на Django / Skillbox

818 ₽/мес.
Профессия DS: машинное обучение / Skillbox

Профессия DS: машинное обучение / Skillbox

6172 2469 ₽/мес.
Профессия DS: анализ данных / Skillbox

Профессия DS: анализ данных / Skillbox

6172 2469 ₽/мес.

Вам помогла эта статья? Поделитесь в соцсетях или блоге. Репосты помогают сайту развиться.

Александр эксперт Яндекс.Кью
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: