害怕部署機器學習模型?這裡有一篇手把手教程
照片由 Franck V 釋出在 Unsplash 上
閱讀本文後,你將能夠部署機器學習模型,並用你想要的程式語言進行預測。沒錯,你可以堅持使用 Python,也可以通過 Java 或 Kotlin 直接在你的 Android 應用程式中進行預測。另外,你可以直接在你的 web 應用程式中使用該模型——你有很多很多選擇。為了簡單起見,我會用
Postman
。
不過,我不會解釋如何將這個模型放到一個實時伺服器上,因為選擇太多了。該模型將在你的本地主機上執行,因此,你將無法從不同的網路訪問它(但請隨意使用 google 查詢如何將模型部署到 AWS 或類似的東西上)。
我已經做了以下目錄結構:
ML 部署:
-
model / Train.py
-
app.py
如果你已經通過 Anaconda 安裝了 Python,那麼你可能已經預先安裝了所有庫,除了 Flask。因此,啟動終端並執行以下語句:
pip install Flask
pip install Flask-RESTful
進展是不是很順利?很好,現在讓我們來看看好東西。
製作基本預測指令碼
如果您正在遵循目錄結構,那麼現在應該開啟 model/Train.py 檔案。你先要載入虹膜資料集,並使用一個簡單的決策樹分類器來訓練模型。訓練完成後,我將使用 joblib 庫儲存模型,並將精度分數報告給使用者。
這裡並不複雜,因為機器學習不是本文的重點,這裡只是模型部署。下面是整個指令碼:
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.externals import joblib
def train_model():
iris_df = datasets.load_iris()
x = iris_df.data
y = iris_df.target
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
dt = DecisionTreeClassifier().fit(X_train, y_train)
preds = dt.predict(X_test)
accuracy = accuracy_score(y_test, preds)
joblib.dump(dt, 'iris-model.model')
print('Model Training Finished.\n\tAccuracy obtained: {}'.format(accuracy))
部署
現在你可以開啟 app.py 檔案並執行一些匯入操作。你需要作業系統模組:Flask 和 Flask RESTful 中的一些東西,它們是 10 秒前建立的模型訓練指令碼,你還要將它們和 joblib 載入到訓練模型中:
import os
from flask import Flask, jsonify, request
from flask_restful import Api, Resource
from model.Train import train_model
from sklearn.externals import joblib
現在你應該從 Flask RESTful 中建立 Flask 和 Api 的例項。沒什麼複雜的:
app = Flask(__name__)
api = Api(app)
接下來要做的是檢查模型是否已經訓練好了。在 Train.py 中,你已經宣告該模型將儲存在檔案 iris-model.model 檔案中,並且如果該檔案不存在,則應該首先對模型進行訓練。訓練完成後,可以通過 joblib 載入:
if not os.path.isfile('iris-model.model'):
train_model()
model = joblib.load('iris-model.model')
現在你需要宣告一個用於進行預測的類。Flask RESTful 使用此編碼約定,因此你的類將需要從 Flask RESTful 資源模組繼承。在類中,可以宣告 get()、post()或任何其他處理資料的方法。
我們將使用 post(),因此資料不會直接通過 URL 傳遞。你需要從使用者輸入中獲取屬性(根據使用者輸入的屬性值進行預測)。然後,可以呼叫載入模型的 .predict()函式。僅僅因為這個資料集的目標變數的格式是(0,1,2)而不是('Iris-setosa','Iris versicolor','Iris virginica'),你還需要解決這個問題。最後,你可以返回預測的 JSON 表示:
class MakePrediction(Resource):
@staticmethod
def post():
posted_data = request.get_json()
sepal_length = posted_data['sepal_length']
sepal_width = posted_data['sepal_width']
petal_length = posted_data['petal_length']
petal_width = posted_data['petal_width']
prediction = model.predict([[sepal_length, sepal_width, petal_length, petal_width]])[0]
if prediction == 0:
predicted_class = 'Iris-setosa'
elif prediction == 1:
predicted_class = 'Iris-versicolor'
else:
predicted_class = 'Iris-virginica'
return jsonify({
'Prediction': predicted_class
})
我們就快完成了,加油!你還需要宣告一個路由,URL 的一部分將用於處理請求:
api.add_resource(MakePrediction, '/predict')
最後一件事是告訴 Python 去除錯模式執行應用程式:
if __name__ == '__main__':
app.run(debug=True)
這樣做就對了。你可以通過 Postman 或其他工具啟動模型並進行預測。
為了防止你漏掉什麼,這裡是整個 app.py 檔案,你可以參考:
import os
from flask import Flask, jsonify, request
from flask_restful import Api, Resource
from model.Train import train_model
from sklearn.externals import joblib
app = Flask(__name__)
api = Api(app)
if not os.path.isfile('iris-model.model'):
train_model()
model = joblib.load('iris-model.model')
class MakePrediction(Resource):
@staticmethod
def post():
posted_data = request.get_json()
sepal_length = posted_data['sepal_length']
sepal_width = posted_data['sepal_width']
petal_length = posted_data['petal_length']
petal_width = posted_data['petal_width']
prediction = model.predict([[sepal_length, sepal_width, petal_length, petal_width]])[0]
if prediction == 0:
predicted_class = 'Iris-setosa'
elif prediction == 1:
predicted_class = 'Iris-versicolor'
else:
predicted_class = 'Iris-virginica'
return jsonify({
'Prediction': predicted_class
})
api.add_resource(MakePrediction, '/predict')
if __name__ == '__main__':
app.run(debug=True)
好的,你準備好了嗎?
不錯!導航到根目錄(app.py 就在根目錄中),啟動終端並執行以下操作:
python app.py
大約一秒鐘後,你將得到一個輸出,顯示應用程式正在本地主機上執行。
現在我將開啟 Postman 並執行以下操作:
-
將方法更改為 POST
-
輸入 localhost:5000/predict 作為 URL
-
在 Body 選項卡中選擇 JSON
-
輸入一些 JSON 進行預測
然後你可以點選傳送:
瞧!幾乎馬上你就能從你的模型中得到預測。
寫在最後
我希望你能看完這篇文章。如果你只是複製貼上的所有內容,只要你安裝了所有必需的庫,那麼應該就可以繼續。
我強烈建議你在自己的資料集和業務問題上利用這些新獲得的知識。如果你用 Python 以外的語言編寫應用程式,並且使用 Python 只是為了資料和機器學習相關的東西,那麼它就很有用了。
via: http://t.cn/AirsMxVF
https://www.leiphone.com/news/201911/0MZcjBhWGCRuD9il.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2665110/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於商業部署機器學習,這有一篇詳盡指南機器學習
- 學好機器學習,這裡有想要的一切機器學習
- 15大領域、127個任務,這裡有最全的機器學習SOTA模型機器學習模型
- 學好機器學習,這裡有你想要的一切機器學習
- 5種常用的機器學習模型及其優缺點,都在這裡了機器學習模型
- TensorFlow Serving: 高效能機器學習模型部署利器機器學習模型
- 機器學習模型機器學習模型
- 機器學習第一步,這是一篇手把手的隨機森林入門實戰機器學習隨機森林
- 讀這一篇,對於AI、機器學習、深度學習你都會有基本的認知AI機器學習深度學習
- 六條規則讓你更快部署機器學習模型!機器學習模型
- 使用pmml實現跨平臺部署機器學習模型機器學習模型
- 如何將模型部署到安卓移動端,這裡有一份簡單教程模型安卓
- 機器學習模型部署--打通前後端任督二脈機器學習模型後端
- 用機器學習覆盤世界盃?這裡有一份實用指南機器學習
- 【機器學習】乾貨丨機器學習知識點;機器學習模型的“可解釋性”到底有多重要?機器學習模型
- 如何管理機器學習模型機器學習模型
- 欺騙機器學習模型機器學習模型
- 瀏覽器裡玩機器學習、深度學習瀏覽器機器學習深度學習
- 機器學習導圖系列(5):機器學習模型及神經網路模型機器學習模型神經網路
- 資源 | 普通程式設計師如何自學機器學習?這裡有一份指南~程式設計師機器學習
- 機器學習模型說你有精神病,信不信?機器學習模型
- 害怕面試被問HashMap?這一篇就搞定了!面試HashMap
- Workshop:產品經理小姐姐手把手教你訓練機器學習模型機器學習模型
- 【機器學習】--隱語義模型機器學習模型
- 機器學習——決策樹模型機器學習模型
- 機器學習之模型選擇機器學習模型
- 機器學習之模型診斷機器學習模型
- 機器學習之模型評估機器學習模型
- 從預處理到部署:如何使用Lore快速構建機器學習模型機器學習模型
- 機器學習模型python線上服務部署的兩種例項機器學習模型Python
- 使用pmml跨平臺部署機器學習模型Demo——房價預測機器學習模型
- 反欺詐中所用到的機器學習模型有哪些?機器學習模型
- Docker部署深度學習模型Docker深度學習模型
- 從模型到部署,教你如何用Python構建機器學習API服務模型Python機器學習API
- 機器學習【模型,策略,演算法】機器學習模型演算法
- [文件教程]各位有沒有模型管理裡面的詳細教程啊模型
- 《機器學習_05_線性模型_最大熵模型》機器學習模型熵
- 學會這10種機器學習演算法,你才算入門(附教程)機器學習演算法