Когда вы прошли все этапы разработки своей нейронной сети и получили обученную модель, приходит самое время начать использовать ее на практике. И в этой статье я расскажу, как легко можно это сделать с моделью созданной на Keras, с помощью API, созданном на Flask.
Я не буду в этой статье вдаваться в подробности обучения и работы с самой моделью, она может быть совершенно любой, под вашу задачу. Начнем с того, что у вас есть обученная модель в переменной model.
Теперь нам нужно завернуть работу этой модель в API, чтобы можно было использовать ее в нашем приложении. Для этого нужно сохранить модель в файл, который можно будет потом импортировать и использовать в приложении. Способов для этого есть несколько, я предлагаю один из них, который сама использую на практике. Заранее создаем папку models, где будет лежать наша модель, затем сохраняем:
model_json = model.to_json()
with open("models/model.json", "w") as json_file:
json_file.write(model_json)
model.save_weights("models/model.h5")
После сохранения модели мы получаем два файла: model.json с архитектурой модели и model.h5 с весами обученной модели.
После этого копируем папку models в наш рабочий проект, где будем ее использовать. Далее приведу пример кода для импортирования модели:
import json
from tensorflow import keras
# читаем файл модели
with open('models/model.json') as json_file:
loaded_model_json = json_file.read(
# загружаем модель из json с помощью метода model_from_json
model = keras.models.model_from_json(loaded_model_json)
# загружаем веса обученной модели в модель
model.load_weights("models/model.h5")
# компилируем модель с параметрами, с которыми она была обучена
# здесь вам нужно указать параметры вашей модели
model.compile(loss='...',
optimizer='...',
metrics=[])
После этого можно начать использовать model так же, как и до сохранения.
Теперь давайте используем эту модель в API Flask-а:
import json
from tensorflow import keras
from flask import Flask, request
def create_app(test_config=None):
app = Flask(__name__)
# читаем файл модели
with open('models/model.json') as json_file:
loaded_model_json = json_file.read()
# загружаем модель из json с помощью метода model_from_json
app.model = keras.models.model_from_json(loaded_model_json)
# загружаем веса обученной модели в модель
app.model.load_weights("models/model.h5")
# компилируем модель с параметрами, с которыми она была обучена
# здесь вам нужно указать параметры вашей модели
app.model.compile(loss='...',
optimizer='...',
metrics=[])
@app.route('/get_category_by_text', methods=['OPTIONS', 'POST'])
# метод для классификации текста
def get_category_by_text():
# берем данные из запросы
text = request.form.get('text')
# передаем в модель для предсказания
prediction = app.model.predict(np.array(test))
# отправляем ответ клиенту
return json.dumps({'category': prediction })
return app
После этого делаем запросы к серверу, передавая нужны данные. В примере нет никакой дополнительной обработки данных перед передачей в модель, на практике вам нужно будет сделать всю туже обработку данных, которую вы делали, когда обучали модель. Например, если ваша модель работает с текстом и перед обучением вы убирали из текста знаки препинания, окончания слов и использовали Tokenizer, то все тоже самое нужно сделать прежде чем отдать модели для предсказания новый текст.
Дальше все зависит от вашего конкретного случая, но описанные шаги помогут вам сохранить и использовать свою Keras модель в рабочем приложении.