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

Упражнение Керас

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

Данные

Для этого упражнения мы будем использовать набор данных ленты новостей Reuters. Этот набор данных состоит из 11 228 новостных лент информационного агентства Reuters. Каждый провод кодируется как последовательность индексов слов, как и в данных IMDB, с которыми мы столкнулись в лекции 5 этой серии. Более того, каждый провод относится к одной из 46 тем, которые будут служить нашей меткой. Этот набор данных доступен через Keras API.

Цель

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

инструкции

Мы начинаем с импорта всего, что нам нужно для этого упражнения:

In [1]:

import pip
try:
    __import__('keras')
except ImportError:
    pip.main(['install', 'keras']) 
    
try:
    __import__('h5py')
except ImportError:
    pip.main(['install', 'h5py']) 
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.utils import to_categorical
seed = 1337
np.random.seed(seed)
Using TensorFlow backend.

ВАЖНЫЙ! =› В случае, если h5py был установлен, перезапустите ядро, нажав «Kernel»-> «Restart and Clear Outout» и подождите, пока весь вывод не исчезнет. Затем ваши изменения принимаются

Как видите, мы используем модель Keras Sequential только с двумя типами слоев: Dense и Dropout. Мы также указываем случайное начальное число, чтобы сделать наши результаты воспроизводимыми. Затем мы загружаем набор данных Reuters:

In [ ]:

from keras.datasets import reuters
max_words = 1000
(x_train, y_train), (x_test, y_test) = reuters.load_data(num_words=max_words,
                                                         test_split=0.2,
                                                         seed=seed)
num_classes = np.max(y_train) + 1  # 46 topics

Обратите внимание, что мы ограничиваем максимальное количество слов в новости до 1000, указав ключевое слово num_words. Кроме того, 20% данных будут тестовыми данными, и мы обеспечиваем воспроизводимость, устанавливая наше случайное начальное число.

Наши обучающие функции по-прежнему представляют собой просто последовательности индексов, и нам необходимо дополнительно их предварительно обработать, чтобы мы могли подключить их к плотному слою. Для этого мы используем Tokenizer из модуля предварительной обработки текста Keras. Этот токенизатор возьмет последовательность индексов и сопоставит ее с вектором длины max_words=1000. Каждая из 1000 позиций вектора соответствует одному слову в нашем корпусе новостей. Выход токенизатора имеет 1 на i-й позиции вектора, если слово, соответствующее i, есть в описании новостной ленты, и 0 в противном случае. Даже если это слово встречается несколько раз, мы все равно просто ставим 1 в наш вектор, т.е. наш токенизатор двоичный. Мы используем этот токенизатор для преобразования функций обучения и тестирования:

In [ ]:

from keras.preprocessing.text import Tokenizer
tokenizer = Tokenizer(num_words=max_words)
x_train = tokenizer.sequences_to_matrix(x_train, mode='binary')
x_test = tokenizer.sequences_to_matrix(x_test, mode='binary')

1. Упражнение: кодирование меток

Используйте to_categorical, как мы делали это в лекциях, чтобы преобразовать как y_train, так и y_test в горячие закодированные векторы длины num_classes:

In [ ]:

y_train = to_categorical(y_train, num_classes)
y_test = to_categorical(y_test, num_classes)

2. Упражнение: определение модели

Затем инициализируйте модель Keras Sequential и добавьте к ней три слоя:

Layer: Add a *Dense* layer with in input_shape=(max_words,), 512 output units and "relu" activation.
Layer: Add a *Dropout* layer with dropout rate of 50%.
Layer: Add a *Dense* layer with num_classes output units and "softmax" activation.

In [ ]:

model = Sequential()  # Instantiate sequential model
model.add(Dense(512, activation='relu', input_shape=(max_words,))) # Add first layer
model.add(Dropout(0.5)) # Add second layer
model.add(Dense(num_classes, activation='softmax')) # Add third layer

3. Упражнение: составление модели

В качестве следующего шага нам нужно скомпилировать нашу модель Keras с обучающей конфигурацией. Скомпилируйте свою модель с «categorical_crossentropy» в качестве функции потерь, «adam» в качестве оптимизатора и укажите «accuracy» в качестве метрики оценки. ПРИМЕЧАНИЕ. Если вы получите сообщение об ошибке, связанное с h5py, просто перезапустите ядро ​​и начните с нуля.

In [ ]:

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

4. Упражнение: обучение модели и оценка

Затем задайте размер пакета для обучения равным 32 и обучите модель в течение 5 эпох на x_train и y_train, используя метод fit вашей модели. Затем подсчитайте оценку для обученной модели, запустив evaluate для x_test и y_test с тем же размером пакета, который используется в fit.

In [ ]:

batch_size = 32
model.fit(x_train, y_train, batch_size=batch_size)
score = model.evaluate(x_test, y_test)

Если вы сделали все, как указано, в частности, установили случайное начальное число, как мы сделали выше, точность вашего теста должна быть около 80%.

In [ ]:

score[1]

5. Упражнение: сериализация модели

В качестве последнего шага в этом упражнении сохраните модель как «model.h5».

In [ ]:

model.save("model.h5")