推薦 :手把手教你用Flask輕鬆部署機器學習模型(附代碼&連結)

2022-02-01 數據分析

作者:Abhinav Sagar 翻譯:申利彬 校對:吳金笛

本文可以讓你把訓練好的機器學習模型使用Flask API 投入生產環境。

本文旨在讓您把訓練好的機器學習模型通過Flask API 投入到生產環境 。當數據科學或者機器學習工程師使用Scikit-learn、Tensorflow、Keras 、PyTorch等框架部署機器學習模型時,最終的目的都是使其投入生產。通常,我們在做機器學習項目的過程中,將注意力集中在數據分析,特徵工程,調整參數等方面。但是,我們往往會忘記主要目標,即從模型預測結果中獲得實際的價值。部署機器學習模型或者將模型投入生產,意味著將模型提供給最終的用戶或系統使用。然而機器學習模型部署具有一定的複雜性,本文可以讓你把訓練好的機器學習模型使用Flask API 投入生產環境。我將使用線性回歸,通過利率和前兩個月的銷售額來預測第三個月的銷售額。線性回歸模型的目標是找出一個或多個特徵(自變量)和一個連續目標變量(因變量)之間的關係。如果只有一個特徵,則稱為單變量線性回歸;如果有多個特徵,則稱為多元線性回歸。

容易上手使用

內置開發工具和調試工具

集成單元測試功能

平穩的請求調度

詳盡的文檔

1. model.py -- 包含機器學習模型的代碼,用於根據前兩個月的銷售額預測第三個月的銷售額。2. app.py – 包含用於從圖形用戶界面(GUI)或者API調用獲得詳細銷售數據的Flask API,Flask API根據我們的模型計算預測值並返回。3. request.py -- 使用requests模塊調用app.py中定義的API並顯示返回值。4. HTML/CSS – 包含HTML模板和CSS風格代碼,允許用戶輸入銷售細節並顯示第三個月的預測值。

代碼在哪裡呢?

從代碼開始,完整的項目可以在github上找到(https://github.com/abhinavsagar/Machine-Learning-Deployment-Tutorials)。我們使用HTML構建前端,讓用戶輸入數據。這裡有三個區域需要用戶去填寫—利率,第一個月的銷售額以及第二個月的銷售額。
<!DOCTYPE html><html ><head>  <meta charset="UTF-8">   <title>Deployment Tutorial 1</title>    <link href='https://fonts.googleapis.com/css?family=Pacifico' rel='stylesheet' type='text/css'>   <link href='https://fonts.googleapis.com/css?family=Arimo' rel='stylesheet' type='text/css'>   <link href='https://fonts.googleapis.com/css?family=Hind:300' rel='stylesheet' type='text/css'>   <link href='https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300' rel='stylesheet' type='text/css'>   <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}"></head><body style="background: #000;">    <div><h1>Sales Forecasting    </h1>         <!-- Main Input For Receiving Query to our ML -->         <form action="{{ url_for('predict')}}"method="post">          <input type="text" name="rate" placeholder="rate" required="required" />                  <input type="text" name="sales in first month" placeholder="sales in first month" required="required" />                 <input type="text" name="sales in second month" placeholder="sales in second month" required="required" />                         <button type="submit" class="btn btn-primary btn-block btn-large">Predict sales in third month</button>                         </form>                           <br>                             <br>   {{ prediction_text }}                             </div>                            </body>                            </html>

接下來,使用CSS對輸入按鈕、登錄按鈕和背景進行了一些樣式設置。

@import url(https://fonts.googleapis.com/css?family=Open+Sans);html { width: 100%; height:100%; overflow:hidden; }body {width: 100%;height:100%;font-family: 'Helvetica';background: #000;color: #fff;font-size: 24px;text-align:center;letter-spacing:1.4px;}.login {position: absolute;top: 40%;left: 50%;margin: -150px 0 0 -150px;width:400px;height:400px;}

login h1 { color: #fff; text-shadow: 0 0 10px rgba(0,0,0,0.3); letter-spacing:1px;  text-align:center;   }input {width: 100%;  margin-bottom: 10px;  background: rgba(0,0,0,0.3);  border: none;  outline: none;  padding: 10px;  font-size: 13px;  color: #fff;  text-shadow: 1px 1px 1px rgba(0,0,0,0.3);  border: 1px solid rgba(0,0,0,0.3);  border-radius: 4px;  box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2);  -webkit-transition: box-shadow .5s ease;  -moz-transition: box-shadow .5s ease;  -o-transition: box-shadow .5s ease;  -ms-transition: box-shadow .5s ease;  transition: box-shadow .5s ease;  }

我為這個項目創建了一個定製的銷售數據集,它有四列——利率、第一個月的銷售額、第二個月的銷售額和第三個月的銷售額。

我們現在構建一個機器學習模型來預測第三個月的銷售額。首先使用Pandas解決缺失值問題,當一項或多項指標沒有信息時,就會有缺失值發生。使用0填充利率這一列的缺失值,平均值填充第一個月銷售額中的缺失值,採用線性回歸的機器學習算法。簡而言之,序列化是一種在磁碟上寫入python對象的方法,該對象可以傳輸到任何地方,然後通過python腳本反序列化(讀)回去。

使用Pickling將是python對象形式的模型轉為字符流形式,其思想是這個字符流中包含了在另一個python腳本中重建這個對象所需的所有信息。
import numpy as npimport matplotlib.pyplot as pltimport pandas as pdimport pickledataset = pd.read_csv('sales.csv')dataset['rate'].fillna(0, inplace=True)dataset['sales_in_first_month'].fillna(dataset['sales_in_first_month'].mean(), inplace=True)X = dataset.iloc[:, :3]def convert_to_int(word):    word_dict = {'one':1, 'two':2, 'three':3, 'four':4, 'five':5, 'six':6, 'seven':7, 'eight':8,                'nine':9, 'ten':10, 'eleven':11, 'twelve':12, 'zero':0, 0: 0}    return word_dict[word]X['rate'] = X['rate'].apply(lambda x : convert_to_int(x))y = dataset.iloc[:, -1]from sklearn.linear_model import LinearRegressionregressor = LinearRegression()
regressor.fit(X, y)pickle.dump(regressor, open('model.pkl','wb'))model = pickle.load(open('model.pkl','rb'))print(model.predict([[4, 300, 500]]))

下一部分是構建一個API,反序列化這個模型為python對象格式,並通過圖形用戶界面(GUI)獲取詳細銷售數據,根據模型計算預測值。我使用index.html設置主頁,並在使用POST請求方式提交表單數據時,獲取預測的銷售值。可以通過另一個POST請求將結果發送給results並展示出來。它接收JSON格式的輸入,並使用訓練好的模型預測出可以被API端點接受的JSON格式的預測值。
import numpy as npfrom flask import Flask, request, jsonify, render_templateimport pickleapp = Flask(__name__)model = pickle.load(open('model.pkl', 'rb'))@app.route('/')def home():    return render_template('index.html')  @app.route('/predict',methods=['POST'])  def predict():      int_features = [int(x) for x in request.form.values()]         final_features = [np.array(int_features)]             prediction = model.predict(final_features)               output = round(prediction[0], 2)                   return render_template('index.html', prediction_text='Sales should              be $ {}'.format(output))@app.route('/results',methods=['POST'])def results():    data = request.get_json(force=True)    prediction = model.predict([np.array(list(data.values()))])    output = prediction[0]    return jsonify(output)if __name__ == "__main__":app.run(debug=True)

最後使用requests模塊調用在app.py中定義的APIs,它的結果是第三個月銷售額的預測值。
import requestsurl = 'http://localhost:5000/results'r = requests.post(url,json={'rate':5, 'sales_in_first_month':200, 'sales_in_second_month':400})print(r.json()) Results

在web瀏覽器中打開http://127.0.1:5000/,將顯示如下所示的GUI.How to Easily Deploy Machine Learning Models Using Flaskhttps://www.kdnuggets.com/2019/10/easily-deploy-machine-learning-models-using-flask.html

譯者簡介:申利彬,研究生在讀,主要研究方向大數據機器學習。目前在學習深度學習在NLP上的應用,希望在THU數據派平臺與愛好大數據的朋友一起學習進步。

END

轉自:數據派THU 公眾號

版權聲明:本號內容部分來自網際網路,轉載請註明原文連結和作者,如有侵權或出處有誤請和我們聯繫。

合作請加QQ:365242293  

數據分析(ID : ecshujufenxi )網際網路科技與數據圈自己的微信,也是WeMedia自媒體聯盟成員之一,WeMedia聯盟覆蓋5000萬人群。

相關焦點

  • 手把手教你用 Flask,Docker 和 Kubernetes 部署Python機器學習模型(附代碼)
    這不是一個全面的指南,但它會幫助你快速啟動和運行,熟悉基本概念和模式。我們將使用兩種不同的方法演示 ML 模型部署:使用 Docker 和 Kubernetes 的第一原則方法;然後使用 Seldon Core Kubernetes 本機框架來簡化 ML 服務的部署。前者將有助於理解後者,後者構成一個強大的框架,用於部署和監視許多複雜的 ML 模型管道的性能。
  • Flask 和 Google App Engine 部署模型服務
    模型的部署是這些工程性問題中重要的一個,它直接關係到模型在生產系統的使用。一些成熟的機器學習框架會提供自己的解決方案,例如 Tensorflow 提供的 Serving 服務等。但很多情況下我們構建的工程可能不只使用了一種框架,因此一個框架自身的部署工具可能就很難滿足我們的需求了。
  • 教程 | 從零開始:TensorFlow機器學習模型快速部署指南
    本文將介紹一種將訓練後的機器學習模型快速部署到生產種的方式。
  • PyTorch 模型訓練實用教程(附代碼)
    本文也按順序的依次介紹數據、模型和損失函數及優化器,從而給大家帶來清晰的機器學習結構。通過本教程,希望能夠給大家帶來一個清晰的模型訓練結構。當模型訓練遇到問題時,需要通過可視化工具對數據、模型、損失等內容進行觀察,分析並定位問題出在數據部分?模型部分?還是優化器?只有這樣不斷的通過可視化診斷你的模型,不斷的對症下藥,才能訓練出一個較滿意的模型。
  • Oracle開源GraphPipe:幾行代碼讓你在TensorFlow部署PyTorch模型
    甲骨文公司(Oracle)在人工智慧領域非常低調,但最近其開源的通用深度學習模型部署框架 GraphPipe 著實讓人眼前一亮,它可以讓你的模型在各種框架之間輕鬆轉換
  • 機器學習建模神器PyCaret已開源!提升效率,幾行代碼輕鬆搞定模型
    (low-code)機器學習庫,支持在「低代碼」環境中訓練和部署有監督以及無監督的機器學習模型,提升機器學習實驗的效率。現在,讓我們一起來領略下:如何用僅僅幾行代碼搞定一個機器學習模型吧。首發 PyCaret 1.0.0我們很高興能宣布PyCaret,這是一個使用Python的開源機器學習庫,用於在Windows上訓練和部署有監督和無監督的機器學習模型低碼環境。通過PyCaret,您可以在選擇筆記本電腦環境後的幾秒鐘內,從準備數據到部署模型。
  • 【乾貨】Python機器學習項目實戰2——模型選擇,超參數調整和評估(附代碼)
    【乾貨】Python機器學習項目實戰1(附代碼)作者 | William Koehrsen編譯 | 專知用python完成一個完整的機器學習項目:第二部分——Model Selection, Hyperparameter Tuning, and
  • PyCaret:幾行代碼輕鬆搞定從數據處理到模型部署
    東哥最近發現一個開源的Python機器學習庫,名字叫PyCaret,這個輪子正好可以為了解決我剛才所描述的困擾,它的特點是以low-code低代碼量來快速解決從數據預處理到模型部署的整個流程。用了一下感覺確實有點香,因此也和大家分享一下。PyCaret是什麼?
  • TensorRT模型加速部署方案解析(視頻/案例講解)
    ,使得能夠使用、部署起來該教程,講駕馭tensorRT,實現從模型導出,到c++/python推理加速,再到高性能、低耦合、有效、便捷的工程落地方案以最終可用、好用為出發點需要的知識點:1、對深度學習的認識,CV相關知識,PyTorch2、ONNX的認識,Netron工具的簡單使用3、C++和python能力
  • onnx實現對pytorch模型推理加速
    ONNX Runtime是適用於Linux,Windows和Mac上ONNX格式的機器學習模型的高性能推理引擎。onnxruntime模型部署流程1.安裝pip install onnxpip install onnxruntime( pip install onnxruntime-gpu #GPU環境)2.
  • 獨家 | 博士學霸推薦:機器學習9種必備工具
    Conda主頁提供了如何創建第一個環境的教程:https://conda.io/projects/conda/en/latest/user-guide/getting-started.html#starting-conda嚴格性和一致性是取得應用領域博士學位不可或缺的兩大基本支柱。如果你曾經嘗試過使用機器學習模型,你可能知道對測試參數的跟蹤是多麼容易。
  • 手把手教你使用建模神器Pycaret,幾行代碼搞定房價預測模型!
    介紹很多人說,構建機器學習非常困難,使用複雜的代碼。這絕對不是真的。實際上,我們可以用一個簡單的代碼來開發它。
  • Tensorflow實戰系列:手把手教你使用CNN進行圖像分類(附完整代碼)
    【導讀】專知小組計劃近期推出Tensorflow實戰系列,計劃教大家手把手實戰各項子任務。
  • 測試機器學習模型不用寫代碼!谷歌「what-if」工具輕鬆搞定
    該工具提供交互式可視化界面,用戶可以探索並比較模型結果,可以快速地發現模型中的錯誤。構建高效的機器學習系統,需要提出並解決許多問題。僅僅訓練模型然後就放著不管是遠遠不夠的。優秀的機器學習從業者要像偵探一樣,時刻注意探索如何更好地理解構建的模型:數據點的變化將對模型的預測結果造成什麼影響?同一個模型對不同的群體會有哪些不同的表現?用來測試模型的數據集的多樣化程度如何等等。
  • 加速深度學習在線部署,TensorRT安裝及使用教程
    但在部署推理時,為了降低成本,往往使用單個GPU機器甚至嵌入式平臺(比如 NVIDIA Jetson)進行部署,部署端也要有與訓練時相同的深度學習環境,如caffe,TensorFlow等。由於訓練的網絡模型可能會很大(比如,inception,resnet等),參數很多,而且部署端的機器性能存在差異,就會導致推理速度慢,延遲高。
  • 項目實踐 - 項目部署(Flask)
    (還是推薦購買伺服器和域名,嫌棄國內繁瑣的備案系統可以購買非大陸內地域名)3、根據自己項目選擇部署的方式,可以使用 Apache、Nginx 、Tomcat、IIS 等,主要是根據項目的依賴友好關係去選擇。4、系統選擇根據不同的部署方式可選擇不同的伺服器作業系統。
  • 手把手教你使用OpenVINO部署NanoDet模型
    【GiantPandaCV】本文為大家介紹了一個手把手使用OpenVINO部署NanoDet的教程,並開源部署的全部代碼,在Intel i7-7700HQ CPU做到了6ms一幀的速度。NanoDet模型部署sudo apt install cmake 安裝cmakegit clone https://github.com/Wulingtian/nanodet_openvino.git (求star!)
  • GPT2模型訓練,50w個多輪中文對話語料
    在閒暇時間用 GPT2-Chinese模型訓練了幾個長文本的生成模型,並且精讀了一遍作者的源碼,獲益匪淺,加深了自己對GPT2生成模型的一些理解,於是將GPT2模型用於閒聊對話的生成,非常感謝作者的分享。本項目中沿用了原項目中的部分結構和一些命名方式,同時也對很多代碼細節做出了自己實現。
  • 手把手教你使用sklearn快速入門機器學習
    推薦閱讀時間:10min~12min文章內容: 使用sklearn入門機器學習    簡介sklearn(scikit-learn)是一個非常優秀的Python庫,它封裝了機器學習中常用的算法,包括監督學習、非監督學習等。
  • 手把手教你用TensorFlow實現看圖說話 | 教程+代碼
    O’reilly出版社和TensorFlow團隊聯合發布了一份教程,詳細介紹了如何在Google的Show and Tell模型基礎上,用Flickr30k數據集來訓練一個圖像描述生成器。模型的創建、訓練和測試都基於TensorFlow。如果你一時想不起O’reilly是什麼,量子位很願意幫你回憶: