Керас - подборка моделей

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

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

Потеря

В машинном обучении LossФункция используется для поиска ошибки или отклонения в процессе обучения. Керасу требуется функция потерь в процессе компиляции модели.

Keras предоставляет довольно много функций потерь в losses модуль, и они следующие -

  • mean_squared_error
  • mean_absolute_error
  • mean_absolute_percentage_error
  • mean_squared_logarithmic_error
  • squared_hinge
  • hinge
  • categorical_hinge
  • logcosh
  • huber_loss
  • categorical_crossentropy
  • sparse_categorical_crossentropy
  • binary_crossentropy
  • kullback_leibler_divergence
  • poisson
  • cosine_proximity
  • is_categorical_crossentropy

Вся вышеуказанная функция потерь принимает два аргумента -

  • y_true - истинные метки как тензоры

  • y_pred - предсказание той же формы, что и y_true

Импортируйте модуль потерь перед использованием функции потерь, как указано ниже -

from keras import losses

Оптимизатор

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

SGD - Оптимизатор стохастического градиентного спуска.

keras.optimizers.SGD(learning_rate = 0.01, momentum = 0.0, nesterov = False)

RMSprop - Оптимизатор RMSProp.

keras.optimizers.RMSprop(learning_rate = 0.001, rho = 0.9)

Adagrad - Оптимизатор Adagrad.

keras.optimizers.Adagrad(learning_rate = 0.01)

Adadelta - Оптимизатор Adadelta.

keras.optimizers.Adadelta(learning_rate = 1.0, rho = 0.95)

Adam - Оптимизатор Адама.

keras.optimizers.Adam(
   learning_rate = 0.001, beta_1 = 0.9, beta_2 = 0.999, amsgrad = False
)

Adamax - Оптимизатор Adamax от Adam.

keras.optimizers.Adamax(learning_rate = 0.002, beta_1 = 0.9, beta_2 = 0.999)

Nadam - Нестеров Адам оптимизатор.

keras.optimizers.Nadam(learning_rate = 0.002, beta_1 = 0.9, beta_2 = 0.999)

Импортируйте модуль оптимизаторов перед использованием оптимизаторов, как указано ниже -

from keras import optimizers

Метрики

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

  • accuracy
  • binary_accuracy
  • categorical_accuracy
  • sparse_categorical_accuracy
  • top_k_categorical_accuracy
  • sparse_top_k_categorical_accuracy
  • cosine_proximity
  • clone_metric

Подобно функции потерь, метрики также принимают следующие два аргумента:

  • y_true - истинные метки как тензоры

  • y_pred - предсказание той же формы, что и y_true

Импортируйте модуль показателей перед использованием показателей, как указано ниже -

from keras import metrics

Скомпилируйте модель

Модель Кераса предоставляет метод, compile()составить модель. Аргумент и значение по умолчаниюcompile() метод выглядит следующим образом

compile(
   optimizer, 
   loss = None, 
   metrics = None, 
   loss_weights = None, 
   sample_weight_mode = None, 
   weighted_metrics = None, 
   target_tensors = None
)

Важными аргументами являются следующие:

  • функция потерь
  • Optimizer
  • metrics

Пример кода для компиляции режима выглядит следующим образом:

from keras import losses 
from keras import optimizers 
from keras import metrics 

model.compile(loss = 'mean_squared_error',  
   optimizer = 'sgd', metrics = [metrics.categorical_accuracy])

где,

  • функция потерь установлена ​​как mean_squared_error

  • оптимизатор установлен как sgd

  • метрики установлены как metrics.categorical_accuracy

Модельное обучение

Модели обучаются массивами NumPy с использованием fit(). Основное назначение этой функции соответствия - оценка вашей модели при обучении. Это также можно использовать для построения графиков производительности модели. Он имеет следующий синтаксис -

model.fit(X, y, epochs = , batch_size = )

Вот,

  • X, y - Это кортеж для оценки ваших данных.

  • epochs - Нет необходимости оценивать модель во время обучения.

  • batch_size - учебные экземпляры.

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

Создать данные

Давайте создадим случайные данные, используя numpy для x и y с помощью приведенной ниже команды -

import numpy as np 

x_train = np.random.random((100,4,8)) 
y_train = np.random.random((100,10))

Теперь создайте случайные данные проверки,

x_val = np.random.random((100,4,8)) 
y_val = np.random.random((100,10))

Создать модель

Создадим простую последовательную модель -

from keras.models import Sequential model = Sequential()

Добавить слои

Создайте слои для добавления модели -

from keras.layers import LSTM, Dense 

# add a sequence of vectors of dimension 16 
model.add(LSTM(16, return_sequences = True)) 
model.add(Dense(10, activation = 'softmax'))

составить модель

Теперь модель определена. Вы можете скомпилировать с помощью следующей команды -

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

Применить форму ()

Теперь мы применяем функцию fit () для обучения наших данных -

model.fit(x_train, y_train, batch_size = 32, epochs = 5, validation_data = (x_val, y_val))

Создание многослойной ИНС персептрона

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

Давайте применим наши знания и создадим простую ANN на основе MPL.

Модуль набора данных

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

  • Классификация небольших изображений CIFAR10
  • Классификация небольших изображений CIFAR100
  • IMDB Movie рассматривает классификацию настроений
  • Классификация тем в ленте новостей Reuters
  • База данных рукописных цифр MNIST
  • База данных модных товаров Fashion-MNIST
  • Набор данных регрессии цен на жилье в Бостоне

Давайте использовать MNIST database of handwritten digits(или minst) в качестве нашего ввода. minst - это коллекция из 60 000 изображений в оттенках серого 28x28. Он состоит из 10 цифр. Он также содержит 10 000 тестовых изображений.

Код ниже можно использовать для загрузки набора данных -

from keras.datasets import mnist 

(x_train, y_train), (x_test, y_test) = mnist.load_data()

где

  • Line 1 импорт minst из модуля набора данных keras.

  • Line 3 называет load_data функция, которая будет получать данные с онлайн-сервера и возвращать данные в виде двух кортежей, первый кортеж, (x_train, y_train) представляют данные обучения в форме, (number_sample, 28, 28) и его цифровая метка с формой, (number_samples, ). Второй кортеж,(x_test, y_test) представляют тестовые данные одинаковой формы.

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

Создать модель

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

Основные особенности модели следующие:

  • Входной слой состоит из 784 значений (28 x 28 = 784).

  • Первый скрытый слой, Dense состоит из 512 нейронов и функции активации relu.

  • Второй скрытый слой, Dropout имеет значение 0,2.

  • Третий скрытый слой, снова Dense, состоит из 512 нейронов и функции активации relu.

  • Четвертый скрытый слой, Dropout имеет значение 0,2.

  • Пятый и последний слой состоит из 10 нейронов и функции активации softmax.

  • Использовать categorical_crossentropy как функция потерь.

  • Использовать RMSprop() как оптимизатор.

  • Использовать accuracy как метрики.

  • Используйте 128 как размер партии.

  • Используйте 20 как эпохи.

Step 1 − Import the modules

Импортируем необходимые модули.

import keras 
from keras.datasets import mnist 
from keras.models import Sequential 
from keras.layers import Dense, Dropout 
from keras.optimizers import RMSprop 
import numpy as np

Step 2 − Load data

Давайте импортируем набор данных mnist.

(x_train, y_train), (x_test, y_test) = mnist.load_data()

Step 3 − Process the data

Давайте изменим набор данных в соответствии с нашей моделью, чтобы его можно было использовать в нашей модели.

x_train = x_train.reshape(60000, 784) 
x_test = x_test.reshape(10000, 784) 
x_train = x_train.astype('float32') 
x_test = x_test.astype('float32') 
x_train /= 255 
x_test /= 255 

y_train = keras.utils.to_categorical(y_train, 10) 
y_test = keras.utils.to_categorical(y_test, 10)

где

  • reshape используется для изменения формы ввода из кортежа (28, 28) в (784,)

  • to_categorical используется для преобразования вектора в двоичную матрицу

Step 4 − Create the model

Создадим актуальную модель.

model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,))) 
model.add(Dropout(0.2)) 
model.add(Dense(512, activation = 'relu'))
model.add(Dropout(0.2)) 
model.add(Dense(10, activation = 'softmax'))

Step 5 − Compile the model

Скомпилируем модель, используя выбранную функцию потерь, оптимизатор и метрики.

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

Step 6 − Train the model

Обучим модель, используя fit() метод.

history = model.fit(
   x_train, y_train, 
   batch_size = 128, 
   epochs = 20, 
   verbose = 1, 
   validation_data = (x_test, y_test)
)

Последние мысли

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

import keras 
from keras.datasets import mnist 
from keras.models import Sequential 
from keras.layers import Dense, Dropout 
from keras.optimizers import RMSprop 
import numpy as np 

(x_train, y_train), (x_test, y_test) = mnist.load_data() 

x_train = x_train.reshape(60000, 784) 
x_test = x_test.reshape(10000, 784) 
x_train = x_train.astype('float32') 
x_test = x_test.astype('float32') 
x_train /= 255 
x_test /= 255 

y_train = keras.utils.to_categorical(y_train, 10) 
y_test = keras.utils.to_categorical(y_test, 10) 

model = Sequential() 
model.add(Dense(512, activation='relu', input_shape = (784,))) 
model.add(Dropout(0.2)) 
model.add(Dense(512, activation = 'relu')) model.add(Dropout(0.2)) 
model.add(Dense(10, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy', 
   optimizer = RMSprop(), 
   metrics = ['accuracy']) 

history = model.fit(x_train, y_train, 
   batch_size = 128, epochs = 20, verbose = 1, validation_data = (x_test, y_test))

Выполнение приложения даст следующий контент в качестве вывода -

Train on 60000 samples, validate on 10000 samples Epoch 1/20 
60000/60000 [==============================] - 7s 118us/step - loss: 0.2453 
- acc: 0.9236 - val_loss: 0.1004 - val_acc: 0.9675 Epoch 2/20 
60000/60000 [==============================] - 7s 110us/step - loss: 0.1023 
- acc: 0.9693 - val_loss: 0.0797 - val_acc: 0.9761 Epoch 3/20 
60000/60000 [==============================] - 7s 110us/step - loss: 0.0744 
- acc: 0.9770 - val_loss: 0.0727 - val_acc: 0.9791 Epoch 4/20 
60000/60000 [==============================] - 7s 110us/step - loss: 0.0599 
- acc: 0.9823 - val_loss: 0.0704 - val_acc: 0.9801 Epoch 5/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0504 
- acc: 0.9853 - val_loss: 0.0714 - val_acc: 0.9817 Epoch 6/20 
60000/60000 [==============================] - 7s 111us/step - loss: 0.0438 
- acc: 0.9868 - val_loss: 0.0845 - val_acc: 0.9809 Epoch 7/20 
60000/60000 [==============================] - 7s 114us/step - loss: 0.0391 
- acc: 0.9887 - val_loss: 0.0823 - val_acc: 0.9802 Epoch 8/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0364 
- acc: 0.9892 - val_loss: 0.0818 - val_acc: 0.9830 Epoch 9/20 
60000/60000 [==============================] - 7s 113us/step - loss: 0.0308 
- acc: 0.9905 - val_loss: 0.0833 - val_acc: 0.9829 Epoch 10/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0289 
- acc: 0.9917 - val_loss: 0.0947 - val_acc: 0.9815 Epoch 11/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0279 
- acc: 0.9921 - val_loss: 0.0818 - val_acc: 0.9831 Epoch 12/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0260 
- acc: 0.9927 - val_loss: 0.0945 - val_acc: 0.9819 Epoch 13/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0257 
- acc: 0.9931 - val_loss: 0.0952 - val_acc: 0.9836 Epoch 14/20
60000/60000 [==============================] - 7s 112us/step - loss: 0.0229 
- acc: 0.9937 - val_loss: 0.0924 - val_acc: 0.9832 Epoch 15/20 
60000/60000 [==============================] - 7s 115us/step - loss: 0.0235 
- acc: 0.9937 - val_loss: 0.1004 - val_acc: 0.9823 Epoch 16/20 
60000/60000 [==============================] - 7s 113us/step - loss: 0.0214 
- acc: 0.9941 - val_loss: 0.0991 - val_acc: 0.9847 Epoch 17/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0219 
- acc: 0.9943 - val_loss: 0.1044 - val_acc: 0.9837 Epoch 18/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0190 
- acc: 0.9952 - val_loss: 0.1129 - val_acc: 0.9836 Epoch 19/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0197 
- acc: 0.9953 - val_loss: 0.0981 - val_acc: 0.9841 Epoch 20/20 
60000/60000 [==============================] - 7s 112us/step - loss: 0.0198 
- acc: 0.9950 - val_loss: 0.1215 - val_acc: 0.9828