проект машинного обучения в производстве.

В этой статье мы собираемся обсудить в основном развертывание модели машинного обучения с использованием 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
  1. Pickle: собственная библиотека Python для сохранения (сериализации) и загрузки (де-сериализации) объектов Python в виде файлов на диске.
  2. Flask: простой в использовании веб-фреймворк на основе Python.

Структура проекта

Этот проект состоит из четырех основных частей:

  1. iris.py - содержит код для нашей модели машинного обучения для прогнозирования Iris Plant (классификация) по обучающим данным в файле iris.data.
  2. app.py - содержит API-интерфейсы Flask, которые получают ввод данных Iris через графический интерфейс или вызовы API, вычисляют предопределенное значение на основе нашей модели и возвращают его.
  3. iris.pkl - содержит модель перед обучением, которая получается после обучения и будет использоваться в app.py для прогнозирования.
  4. шаблоны - эта папка содержит шаблон 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'))
view raw iris.py hosted with ❤ by GitHub

Сначала мы читаем данные через файл 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)
view raw app.py hosted with ❤ by GitHub
  • Здесь мы инициализируем наше приложение 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
  1. 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>
view raw home.html hosted with ❤ by GitHub

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>
view raw about.html hosted with ❤ by GitHub

Хостинг в локальной системе

Схема построения и развертывания модели

Заключение

Развертывание модели - важная часть любого конвейера машинного обучения.

Flask - это простая структура веб-приложений, которую можно легко создать. Размещение и совместное использование моделей машинного обучения может быть очень простым с помощью Flask API.

Для полного кода: - Github

Если вы хотите узнать больше о развертывании моделей, я хотел бы упомянуть этот отличный список воспроизведения по развертыванию модели с использованием фляги и докера на YouTube, автор Криш Наик. Это было то, что мне очень помогло. Проверьте это.

использованная литература

  1. Https://www.tutorialspoint.com/flask/flask_http_methods.htm
  2. Https://flask.palletsprojects.com/en/1.1.x/

Спасибо за прочтение. Я хочу писать больше сообщений для новичков в будущем, кстати, это мой первый пост на Medium.



Следуйте за мной в Medium. Как всегда, я приветствую отзывы и конструктивную критику, и с ними можно связаться на Linkedin.

Получите доступ к экспертному обзору - Подпишитесь на DDI Intel