проект машинного обучения в производстве.
В этой статье мы собираемся обсудить в основном развертывание модели машинного обучения с использованием flask API, но код для построения и развертывания модели с использованием flask API будет доступен в моем репозитории GitHub, так что вы также можете попробовать это в вашем собственном проекте.
Я предполагаю, что у вас есть некоторый опыт в машинном обучении или построении моделей глубокого обучения и вы хотите создать модель с помощью flask API.
Введение в Flask API
Flask - это облегченная микросхема Интерфейс шлюза веб-сервера (WSGI), написанная на Python. Это означает, что flask предоставляет нам инструменты, библиотеки и технологии, которые позволяют нам создавать веб-приложения. Это веб-приложение может быть некоторыми веб-страницами, блогом или нашим веб-приложением для прогнозирования модели машинного обучения. Flask - это промежуточный носитель для связи нашей модели с интерфейсной веб-страницей для прогнозирования, как показано на изображении ниже.
Предпосылки
Мы предполагаем, что все мы знаем об обучении моделей в jupyter notebook. Этот пост предназначен только для того, чтобы дать представление о развертывании модели машинного обучения в производственной среде с использованием Flask API.
Библиотеки, требующие развертывания в модели:
pip install pickle-mixin
pip install Flask
- Pickle: собственная библиотека Python для сохранения (сериализации) и загрузки (де-сериализации) объектов Python в виде файлов на диске.
- Flask: простой в использовании веб-фреймворк на основе Python.
Структура проекта
Этот проект состоит из четырех основных частей:
- iris.py - содержит код для нашей модели машинного обучения для прогнозирования Iris Plant (классификация) по обучающим данным в файле iris.data.
- app.py - содержит API-интерфейсы Flask, которые получают ввод данных Iris через графический интерфейс или вызовы API, вычисляют предопределенное значение на основе нашей модели и возвращают его.
- iris.pkl - содержит модель перед обучением, которая получается после обучения и будет использоваться в app.py для прогнозирования.
- шаблоны - эта папка содержит шаблон HTML, позволяющий пользователю вводить функции ввода и отображать прогнозируемые выходные данные на веб-странице.
Набор данных
Модельное обучение
import pandas as pd | |
import numpy as np | |
import pickle | |
df = pd.read_csv('iris.data') | |
X = np.array(df.iloc[:, 0:4]) | |
y = np.array(df.iloc[:, 4:]) | |
from sklearn.preprocessing import LabelEncoder | |
le = LabelEncoder() | |
y = le.fit_transform(y) | |
from sklearn.model_selection import train_test_split | |
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) | |
from sklearn.svm import SVC | |
sv = SVC(kernel='linear').fit(X_train,y_train) | |
pickle.dump(sv, open('iri.pkl', 'wb')) |
Сначала мы читаем данные через файл CSV, и у нас есть четыре входных функции и три возможные выходные переменные, поэтому мы помечаем их как кодирование для обучения. После этого мы используем SVC (классификацию векторов поддержки) для обучения модели и сохраняем модель (iri.pkl) с помощью pickle. Для вашей проблемы это может быть иначе, для понимания мы взяли простой пример.
FLask API
from flask import Flask, render_template, request | |
import pickle | |
import numpy as np | |
app = Flask(__name__) | |
model = pickle.load(open('iri.pkl', 'rb')) | |
@app.route('/') | |
def man(): | |
return render_template('home.html') | |
@app.route('/predict', methods=['POST']) | |
def home(): | |
data1 = request.form['a'] | |
data2 = request.form['b'] | |
data3 = request.form['c'] | |
data4 = request.form['d'] | |
arr = np.array([[data1, data2, data3, data4]]) | |
pred = model.predict(arr) | |
return render_template('after.html', data=pred) | |
if __name__ == "__main__": | |
app.run(debug=True) |
- Здесь мы инициализируем наше приложение flask, вызывая Flask (__ name__) и загружая модель с помощью pickle.
- «@ App.route (‘ / ’)» здесь мы инициализируем корневой каталог нашего флеш-приложения и в нем мы определяем функцию, которая будет вызываться в этом корневом каталоге.
- «@ App.route ('/ expect', methods = ['POST'])» здесь мы определяем домашнюю функцию, в которой мы получаем данные с внешней HTML-страницы с помощью request.form [''] и прогнозируем вывод, а затем отправляем его обратно. на HTML-страницу для визуализации прогнозов.
По умолчанию маршрут Flask отвечает на запросы GET. Однако это предпочтение можно изменить, предоставив аргумент метода декоратору route ().
Чтобы продемонстрировать использование метода POST в маршрутизации URL-адресов, сначала давайте создадим HTML-форму и воспользуемся методом POST для отправки данных формы по URL-адресу.
Следующий скрипт запускает флеш-сервер на локальном хосте и порте по умолчанию (5000), создавая URL: https://127.0.0.1: 5000 /
Просто вставьте https://127.0.0.1:5000/ в браузер и нажмите клавишу ВВОД, чтобы увидеть, как сервер работает.
HTML-шаблон
templates folder | +-- home.html | +-- after.html
- home.html - это корневая страница по умолчанию, которая открывается, когда мы открываем ссылку в браузере. Он содержит форму, через которую мы предоставляем функцию ввода (всего четыре) в текстовом формате, и при нажатии на кнопку отправки он вызывает домашнюю функцию для прогнозирования в app.py.
<html> | |
<body bgcolor=#d4a3ae> | |
<center> | |
<h1> IRIS FLOWER DETECTION </h1><br> | |
<form method="POST", action="{{url_for('home')}}"> | |
<b> First value : <input type="text", name='a', placeholder="enter 1"> <br><br> | |
Second value : <input type="text", name='b', placeholder="enter 2"> <br><br> | |
Third value : <input type="text", name='c', placeholder="enter 3"> <br><br> | |
Fourth value : <input type="text", name='d', placeholder="enter 4"> <br><br><br></b> | |
<input type="submit" , value='predict!' > | |
</form> | |
<img src='static\flower1.jpg' alt="flower"> | |
</center> | |
</body> | |
</html> |
2. after.html - это страница, вызываемая функцией home в каталоге «/ прогноз», которая отображает прогноз модели.
<html> | |
<body bgcolor=#9d3bc4> | |
<center> | |
<h1> PREDICTION : </h1> | |
{%if data == 0%} | |
<h1>Iris-setosa</h1> | |
<img src='static\setosa.jpg'> | |
{%else%} | |
<h1>Iris-versicolor</h1> | |
<img src='static\verci.jpg'> | |
{%endif%} | |
<br><br> | |
<a href='/'>go back to home page</a> | |
</center> | |
</body> | |
</html> |
Хостинг в локальной системе
Схема построения и развертывания модели
Заключение
Развертывание модели - важная часть любого конвейера машинного обучения.
Flask - это простая структура веб-приложений, которую можно легко создать. Размещение и совместное использование моделей машинного обучения может быть очень простым с помощью Flask API.
Для полного кода: - Github
Если вы хотите узнать больше о развертывании моделей, я хотел бы упомянуть этот отличный список воспроизведения по развертыванию модели с использованием фляги и докера на YouTube, автор Криш Наик. Это было то, что мне очень помогло. Проверьте это.
использованная литература
- Https://www.tutorialspoint.com/flask/flask_http_methods.htm
- Https://flask.palletsprojects.com/en/1.1.x/
Спасибо за прочтение. Я хочу писать больше сообщений для новичков в будущем, кстати, это мой первый пост на Medium.
Следуйте за мной в Medium. Как всегда, я приветствую отзывы и конструктивную критику, и с ними можно связаться на Linkedin.
Получите доступ к экспертному обзору - Подпишитесь на DDI Intel