Хотя Keras поддерживает другие формы сохранения моделей, я понимаю, что некоторые люди предпочитают мариновать модель. В этом посте мы рассмотрим модель Keras. Мы делаем это с помощью оболочки Keras / SK-Learn deploy-ml. Если у вас его нет, установите его с помощью pip:

pip install deployml

В этом примере мы собираемся использовать нейронную сеть. Мы импортируем базу нейронной сети из deploy-ml и pandas, так как данные должны быть введены в оболочку через фрейм данных pandas. Если у вас еще не установлены панды, не беспокойтесь, deploy-ml автоматически установит панды и Keras в качестве зависимости, когда вы запустите команду pip.

import pandas as pd
from deployml.keras import NeuralNetworkBase

Затем мы загружаем данные. В этом примере данные уже были очищены, вам придется очистить данные самостоятельно, поскольку это уникально для каждого проекта / проблемы:

train = pd.read_csv('example_data.csv')

Затем мы определяем модель нейронной сети со скрытыми слоями [7, 3] и атрибутом данных. В данных для этого примера результат, который мы пытаемся предсказать, является «оплаченным», поэтому мы используем атрибут result_pointer как «оплаченный». Количество вводов, подаваемых в нейронную сеть, определяется n_classes. Это длина количества ключей минус один, учитывая, что один столбец будет результатом, который мы пытаемся предсказать. Первый уровень также равен количеству узлов и количеству входов:

NN = NeuralNetworkBase(hidden_layers = (7, 3),
                       first_layer=len(train.keys())-1, 
                       n_classes=len(train.keys())-1)
NN.data = train
NN.outcome_pointer = 'paid'

Есть и другие аргументы, которые освещены в документации. Затем нейронная сеть обучается:

NN.train(scale=True, batch_size=100)

Вы можете видеть, что мы установили масштабирование на True. Это означает, что данные масштабируются с помощью стандартного масштабатора SK-Learn. Доступны разные скейлеры. Функция train разделяет данные на тестовые и обучающие, а затем обучает их. Масштабатор устанавливается на данные поезда, затем он преобразует данные поезда и тестирования. Установленный скейлер автоматически сохраняется в объекте deploy-ml, чтобы его можно было использовать снова или сохранить.

Затем мы можем показать кривую обучения с помощью следующей команды:

NN.show_learning_curve()

Если вы хотите увидеть отзыв, точность и оценку f-1, это определяется следующим образом:

NN.evaluate_outcome()

При этом используется отчет о классификации SK-Learn, и он сохраняется как атрибут в классе, который будет сохранен при травлении модели Кераса.

Вы можете получить доступ к своей модели Keras, просто обратившись к атрибуту модели:

NN.model

Если вы хотите сохранить свою модель, просто используйте метод развертывания:

NN.deploy_model(description='Keras NN',
                author="maxwell flitton", organisation='example',
                file_name='neural.sav')

Это выберет модель, время, версии python / Keras, приспособленный масштабатор, метрики и порядок вводимых переменных (извлеченных из имен столбцов фрейма входных данных). Это позволяет вам снова использовать вашу модель, не рискуя забыть такие детали, как порядок ввода или метрики. Чтобы загрузить модель, вы просто используете рассол:

import pickle
loaded_model = pickle.load(open("neural.sav", 'rb'))

Это загружает словарь. Если у вас есть новые данные, вы можете вызвать кнопку «масштабирования», чтобы получить доступ к сохраненному масштабирующему устройству, и преобразовать ваши новые входные данные:

input_data = loaded_model['scaler'].transform([[1, 28, 0, 1, 30]])

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

loaded_model['model'].predict(input_data)[0][0]

Вот и все. Оболочка deploy-ml делает возможными повторную выборку и сохранение хорошо документированной модели Keras с помощью всего нескольких строк кода.