Этот пост поможет вам понять, как развернуть модель обучения машины в сети, используя колбу. Я использовал Heroku Развернуть модель ML.
Что такое Heroku?
Heroku – это многоязычная облачная платформа приложений, которая позволяет разработчикам развертывать, масштабировать и управлять своими приложениями. Heroku элегантный, гибкий и простой в использовании, предлагая разработчикам самым простым путем для получения их приложений на рынок. Salesforce Приобретен Heroku в 2010 году, проводя 212 миллионов долларов на наряду облачных вычислений.
Следуйте указанным ниже шагам:
- Поезд ML модели
- Создайте веб-приложение, используя колбу
- Совершить код до Github
- Подключите Github к Heroku
- Разверните модель
Тренировать модель обучения машины
Я использую логистическую регрессию как алгоритм классификации. Я использовал FRAMINGHAM Сердце исследования набора данных предсказать риск развития сердечных заболеваний. Целью исследования Framingham является изучение заболеваемости и распространенности сердечно-сосудистых заболеваний (CVD) и его факторов риска.
import pandas as pd import numpy as np import pickle from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split # Reading dataframe and dropping rows with na values data = pd.read_csv("framingham.csv") data.dropna(inplace=True) # Consists 3658 records # Computing Correlation corr_matrix = data.corr().abs() high_corr_var = np.where(corr_matrix > 0.35) high_corr_var = [(corr_matrix.index[x], corr_matrix.columns[y]) for x, y in zip(*high_corr_var) if x != y and x < y] """ Variables to consider age: Age of a person (Input a number) smoker: Yes or No Cigs per day: (Input a number) diabaties: Yes or No bmi: weight(Kg) and height(meters) calculate BP: input a number """ def bmi(weight, height): return round(float(weight) / (float(height) * float(height)), 2) X_cols = ['male', 'age', 'currentSmoker', 'cigsPerDay', 'diabetes', 'sysBP', 'BMI'] Y_col = ['TenYearCHD'] X_vars = data[X_cols] Y_var = data[Y_col] # Renaming Columns X_vars.columns = ['Gender', 'Age', 'Smoker', 'Cigarettes_Per_Day', 'Diabetic', 'BP', 'BMI'] Y_var.columns = ['Chances_of_hear_disease'] # Splitting data X_train, X_test, y_train, y_test = train_test_split(X_vars, Y_var, test_size=0.25, random_state=0) # Initiate the Model logreg = LogisticRegression() # fit the model with data logreg.fit(X_train, y_train) pickle.dump(logreg, open('model.pkl', 'wb'))
Я использовал Парил Библиотека, которая в основном поможет вам бросить свою модель в потоке символов формы. Идея состоит в том, что этот поток символов содержит всю информацию, необходимую для восстановления объекта в другом сценарии Python. Это создаст файл model.pkl в режиме записи байта, который позже будет использоваться для развертывания модели.
Создайте веб-приложение, используя колбу
Ниже я определил приложенные маршруты и завершив файл App.py. Я создал Index.html который будет служить домашней страницей, где мы будем иметь все поле, необходимое для запуска модели. Первый шаг – настроить секретный ключ, который необходим для обеспечения безопасности сеансов на стороне клиента. При работе со сессиями в колбе вам необходимо создать SENTE_KEY, состоящий из случайных байтов, представленных в шестнадцатеричном порядке.
# Set the secret key to some random bytes. # Keep this really secret! app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
Класс DataForm определяет структуру страницы, содержащую радиопередачу, флажки и этикетки. Это поможет нам запечатлеть данные надлежащим образом. Последний шаг – сделать шаблон index.html и принимать входы от пользователя. Когда пользователь подает входы, будет запущена функция индекса, и приложение начнет вычисление окончательного вывода.
import os import pickle from flask_wtf import FlaskForm from flask import Flask, render_template from wtforms.validators import DataRequired from wtforms import IntegerField, BooleanField, FloatField, SubmitField, RadioField class Config(object): SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess' APP_PATH = os.path.dirname(__file__) app = Flask(__name__) app.config.from_object(Config) class DataForm(FlaskForm): gender = RadioField('Gender', validators=[DataRequired()], choices=['Male', 'Female']) age = IntegerField('Age', validators=[DataRequired()]) diabetic = BooleanField('Are you Diabetic?') smoker = BooleanField('Do you smoke? ') cig_count = FloatField('How many cigarettes do you smoke per day ?', default=0) weight = FloatField('Weight (Kg)', validators=[DataRequired()]) height = FloatField('Height (cm)', validators=[DataRequired()]) bp = IntegerField('Blood Pressure (mmHg) Normal range : (90-120)/(60-80)', validators=[DataRequired()]) submit = SubmitField('Submit') @app.route('/') @app.route('/index', methods=['GET', 'POST']) def index(): form = DataForm() if form.validate_on_submit(): li = ['age', 'gender', 'cig_count', 'diabetic', 'height', 'weight', 'smoker', 'bp'] data = {} for ele in li: data[ele] = eval('form.' + ele + '.data') gender = 1 if data['gender'] == 'Male' else 0 smoker = 1 if data['smoker'] else 0 diabetic = 1 if data['diabetic'] else 0 filename = os.path.join(app.config['APP_PATH'], 'model.pkl') with open(filename, 'rb') as f: model = pickle.load(f) value = model.predict([[gender, data['age'], smoker, data['cig_count'], diabetic, data['bp'], bmi(data['weight'], data['height'])]]) data = ['done', value[0]] return render_template('index.html', value=data, form=form, data=data) return render_template('/index.html', form=form) def bmi(weight, height): return round(float(weight) / (float(height / 100) * float(height / 100)), 2) if __name__ == '__main__': app.run(debug=True)
Самое главное состоит в том, чтобы создать Proffile и требование. Atxt, который обрабатывает часть конфигурации, чтобы развернуть модель в сервере Heroku. Веб: божьян Это фиксированная команда, после этого первый параметр App.py файл I.e файл, который будет выполнен в первую очередь. Укажите первый параметр без расширения файла. Второй параметр – это имя приложения для колба. Требования состоит из всех библиотек, которые должны быть установлены в окружающей среде Heroku.
web: gunicorn app:app
click==7.1.2 Flask==1.1.2 Flask-WTF==0.14.3 gunicorn==20.0.4 itsdangerous==1.1.0 Jinja2==2.11.2 joblib==0.16.0 MarkupSafe==1.1.1 numpy==1.19.1 pandas==1.1.0 python-dateutil==2.8.1 python-dotenv==0.14.0 pytz==2020.1 scikit-learn==0.23.2 scipy==1.5.2 six==1.15.0 sklearn==0.0 threadpoolctl==2.1.0 Werkzeug==1.0.1 WTForms==2.3.3
Примите свой код Github и подключите Heroku к Github
Создайте имя приложения в Heroku и подключите репозиторий GitHUB, как показано ниже.
После подключения, есть 2 способа развертывания вашего приложения. Вы можете выбрать автоматическое развертывание или ручное развертывание. Автоматическое развертывание состоится всякий раз, когда вы совершаете что-нибудь в ваш репозиторий GitHUB. Автоматически начнется сборка. Я развернул его, используя ручное развертывание. Просто, выбирая ветку и нажав на развертывание, начнется сборка. После успешного развертывания вкладка развертывания должна выглядеть как показано ниже:
Окончательное приложение
После успешного развертывания приложение будет создано. Нажмите на Вид И ваше приложение должно открыть. Новый URL будет создан.
Оформить заказ моего приложения: https://heart-disease-predictor-api.herokuapp.com/
Я надеюсь, что вы нашли этот пост полезным. Это поможет конечным пользователям взаимодействовать с нашими моделями ML без какой-либо внешней зависимости.
Выполнено!
Octocat сопроводит вас в моем хранилище GitHub …
Оригинал: “https://dev.to/siddheshshankar/deploy-machine-learning-models-using-flask-into-heroku-4b54”