日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

如何利用 Python 創(chuàng)建機(jī)器學(xué)習(xí)模型(python怎么做機(jī)器人)

如何利用 Python 創(chuàng)建機(jī)器學(xué)習(xí)模型(python怎么做機(jī)器人)
如何利用 Python 創(chuàng)建機(jī)器學(xué)習(xí)模型(python怎么做機(jī)器人)

導(dǎo)讀

你是否會(huì)遇到這樣的場(chǎng)景,當(dāng)你訓(xùn)練了一個(gè)新模型,有時(shí)你不想費(fèi)心編寫 Flask Code(Python的web 框架)或者將模型容器化并在 Docker 中運(yùn)行它,就想通過(guò) API 立即使用這個(gè)模型?

如果你有這個(gè)需求,你肯定想了解MLServer。它是一個(gè)基于Python的推理服務(wù)器,最近推出了GA(Genetic Algorithms 遺傳算法)的版本,這是一款專為生產(chǎn)環(huán)境設(shè)計(jì)的高性能服務(wù)器。

使用它可以確保在本地構(gòu)建模型,與投入生產(chǎn)環(huán)境的模型保持一致。

本文以幾個(gè)圖像模型為例,向您介紹如何使用 MLServer。

數(shù)據(jù)集

我們要使用的數(shù)據(jù)集是Fashion MNIST。它包含 70,000 張灰度 28×28 像素的服裝圖像,涵蓋 10 個(gè)不同類別(如上衣、連衣裙、外套、褲子等)。

如果您想重現(xiàn)本文中的代碼,請(qǐng)確保下載文件并將它們解壓縮到名為 data. 因?yàn)槲募浅4螅?span id="qsh1b7padf" class="candidate-entity-word" data-gid="3231109">GitHub 存儲(chǔ)庫(kù)中省略了它們。

1.訓(xùn)練 Scikit-learn 模型

首先,我們將使用scikit-learn框架訓(xùn)練一個(gè)支持向量機(jī)(SVM) 模型。然后我們將模型保存到一個(gè)名為Fashion-MNIST.joblib 的文件中。

import pandas as pdfrom sklearn import SVMimport timeimport joblib#Load Training Datatrain = pd.read_csv('../../data/fashion-mnist_train.csv', header=0)y_train = train['label']X_train = train.drop(['label'], axis=1)classifier = svm.SVC(kernel="poly", degree=4, gamma=0.1)#Train Modelstart = time.time()classifier.fit(X_train.values, y_train.values)end = time.time()exec_time = end-startprint(f'Execution time: {exec_time} seconds')#Save Modeljoblib.dump(classifier, "Fashion-MNIST.joblib")1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.

注意:SVM 算法不是特別適合大型數(shù)據(jù)集,因?yàn)樗哂卸涡再|(zhì)。根據(jù)您的硬件,此示例中的模型將需要幾分鐘的時(shí)間來(lái)訓(xùn)練。

2.服務(wù)于 Scikit-learn 模型

通過(guò)上面的步驟我們的到一個(gè)模型文件Fashion-MNIST.joblib。接下來(lái)看看如何使用 MLServer 來(lái)提供服務(wù)。

首先,通過(guò)如下命令安裝 MLServer:pip install mlserver。

雖然額外的運(yùn)行時(shí)組件是可選的,但在服務(wù)模型時(shí)更加順暢,我們也會(huì)安裝 Scikit-Learn 和 XGBoost 的擴(kuò)展。。

完成pip install mlserver-sklearn mlserver-xgboost操作后,就需要添加如下兩個(gè)配置文件:

(1)settings.json- 這包含服務(wù)器本身的配置。

(2)model-settings.json- 顧名思義,此文件包含要運(yùn)行的模型配置。

對(duì)于settings.json文件,只定義一個(gè)參數(shù)就足夠了:

{ "debug": "true"}1.2.3.

該model-settings.json文件需要更多信息,因?yàn)樗枰私夥?wù)模型信息:

{ "name": "fashion-sklearn", "implementation": "mlserver_sklearn.SKLearnModel", "parameters": { "uri": "./Fashion_MNIST.joblib", "version": "v1" }}1.2.3.4.5.6.7.8.

name 參數(shù)為 MLServer 提供了唯一標(biāo)識(shí)符,在多模型服務(wù)場(chǎng)景下特別有用(稍后會(huì)談到)。定義要使用的implementation從而預(yù)構(gòu)建服務(wù)器(如果有)。它與用于訓(xùn)練模型的機(jī)器學(xué)習(xí)框架高度耦合。在我們的案例中使用 scikit-learn來(lái)訓(xùn)練模型,因此將使用 scikit-learn 實(shí)現(xiàn) MLServer。Parameters配置需要提供模型文件的位置以及版本號(hào)。

通過(guò)上面的配置,就可以使用以下命令為我們的模型提供服務(wù):mlserver start .

就這么簡(jiǎn)單,現(xiàn)在已經(jīng)讓模型在本地服務(wù)器上運(yùn)行起來(lái)了。此時(shí),它已經(jīng)可以接受類似 HTTP 和 gRPC(默認(rèn)端口為8080和8081)的請(qǐng)求了。

3.測(cè)試模型

模型已經(jīng)啟動(dòng)并正常運(yùn)行了,讓我們發(fā)送一些請(qǐng)求測(cè)試它的運(yùn)行情況。

我們會(huì)通過(guò)如下URL 發(fā)送一個(gè) POST 請(qǐng)求:

http://localhost:8080/v2/models/<MODEL_NAME>/versions/<VERSION>/infer

這個(gè)URL意味著訪問(wèn)之前訓(xùn)練的 scikit-learn 模型,這里只需要將MODEL_NAME用fashion-sklearn的模型名稱進(jìn)行替換,同時(shí)將VERSION用v1進(jìn)行替換。

下面的代碼展示如何導(dǎo)入測(cè)試數(shù)據(jù),向模型服務(wù)器發(fā)出請(qǐng)求,然后將結(jié)果與實(shí)際標(biāo)簽進(jìn)行比較:

import pandas as pdimport requests#Import test data, grab the first row and corresponding labeltest = pd.read_csv('../../data/fashion-mnist_test.csv', header=0)y_test = test['label'][0:1]X_test = test.drop(['label'],axis=1)[0:1]#Prediction request parametersinference_request = { "inputs": [ { "name": "predict", "shape": X_test.shape, "datatype": "FP64", "data": X_test.values.tolist() } ]}endpoint = "http://localhost:8080/v2/models/fashion-sklearn/versions/v1/infer"#Make request and print responseresponse = requests.post(endpoint, json=inference_request)print(response.text)print(y_test.values)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.

運(yùn)行上面的test.py之后,會(huì)從 MLServer 得到以下響應(yīng):

"model_name": "fashion-sklearn", "model_version": "v1", "id": "31c3fa70-2e56-49b1-bcec-294452dbe73c", "parameters": null, "outputs": [ { "name": "predict", "shape": [ 1 ], "datatype": "INT64", "parameters": null, "data": [ 0 ] } ]}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.

從響應(yīng)中可以得知, MLServer 已經(jīng)生成了一個(gè)請(qǐng)求 ID,并自動(dòng)添加用于服務(wù)請(qǐng)求的模型和版本的元數(shù)據(jù)。一旦模型投入生產(chǎn),收集類似的元數(shù)據(jù)就顯得非常重要。它允許我們記錄每個(gè)請(qǐng)求從而方便進(jìn)行審計(jì)和故障排除。

您可能還注意到 MLServer 返回一個(gè)數(shù)組outputs。雖然在請(qǐng)求中只發(fā)送了一行數(shù)據(jù),但 MLServer處理批量請(qǐng)求,并一起返回。我們甚至可以通過(guò)一種稱為自適應(yīng)批處理的技術(shù)來(lái)優(yōu)化在生產(chǎn)環(huán)境中處理多個(gè)請(qǐng)求的方式。

在上面的示例中,也可以找到模型的預(yù)測(cè)的結(jié)果。outputs[0].data表明模型已將該樣本標(biāo)記為類別0(數(shù)值 0 對(duì)應(yīng)于類別t-shirt/top)。該樣本的真實(shí)標(biāo)簽0也是如此,因此模型得到了正確的預(yù)測(cè)。

4.訓(xùn)練 XGBoost 模型

通過(guò)上面的例子我們了解了如何使用 MLServer 創(chuàng)建單個(gè)模型,接下來(lái)讓我們看看如何處理在不同框架中訓(xùn)練的多個(gè)模型。

依舊使用 Fashion MNIST 數(shù)據(jù)集,但這次將訓(xùn)練XGBoost模型。

import pandas as pdimport xgboost as xgbimport time#Load Training Datatrain = pd.read_csv('../../data/fashion-mnist_train.csv', header=0)y_train = train['label']X_train = train.drop(['label'], axis=1)dtrain = xgb.DMatrix(X_train.values, label=y_train.values)#Train Modelparams = { 'max_depth': 5, 'eta': 0.3, 'verbosity': 1, 'objective': 'multi:softmax', 'num_class' : 10}num_round = 50start = time.time()bstmodel = xgb.train(params, dtrain, num_round, evals=[(dtrain, 'label')], verbose_eval=10)end = time.time()exec_time = end-startprint(f'Execution time: {exec_time} seconds')#Save Modelbstmodel.save_model('Fashion_MNIST.json')1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.

上面用于訓(xùn)練 XGBoost 模型的代碼與之前用于訓(xùn)練 scikit-learn 模型的代碼類似,但是這一次,我們的模型為了兼容 XGBoost 的格式將其保存為Fashion_MNIST.json 文件.

5.服務(wù)多個(gè)模型

MLServer 的一大優(yōu)點(diǎn)是支持多模型服務(wù)。這意味著不必為部署的每個(gè) ML 模型創(chuàng)建或運(yùn)行新服務(wù)器。使用上面構(gòu)建的模型,將使用此功能同時(shí)為它們提供服務(wù)。

當(dāng) MLServer 啟動(dòng)時(shí),它將在目錄(和任何子目錄)中搜索model-settings.json文件。如果您有多個(gè)model-settings.json文件,那么它將自動(dòng)為所有文件提供服務(wù)。

注意:您仍然只需要指定根目錄中的 (服務(wù)器配置)文件settings.json

這是目錄結(jié)構(gòu)的細(xì)分以供參考:

.├── data│ ├── fashion-mnist_test.csv│ └── fashion-mnist_train.csv├── models│ ├── sklearn│ │ ├── Fashion_MNIST.joblib│ │ ├── model-settings.json│ │ ├── test.py│ │ └── train.py│ └── xgboost│ ├── Fashion_MNIST.json│ ├── model-settings.json│ ├── test.py│ └── train.py├── README.md├── settings.json└── test_models.py1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.

請(qǐng)注意,有兩個(gè)model-settings.json文件 – 一個(gè)用于 scikit-learn 模型,一個(gè)用于 XGBoost 模型。

現(xiàn)在可以運(yùn)行mlserver start .,它將開(kāi)始處理兩個(gè)模型的請(qǐng)求。

[mlserver] INFO - Loaded model 'fashion-sklearn' succesfully.[mlserver] INFO - Loaded model 'fashion-xgboost' succesfully.1.2.

6.測(cè)試多個(gè)模型的準(zhǔn)確性

現(xiàn)在兩個(gè)模型都在 MLServer 上運(yùn)行,我們可以使用測(cè)試集中的樣本來(lái)驗(yàn)證每個(gè)模型的準(zhǔn)確性。

以下代碼向每個(gè)模型發(fā)送一個(gè)批處理請(qǐng)求(包含完整的測(cè)試集),然后將預(yù)測(cè)值與真實(shí)標(biāo)簽進(jìn)行比較。在整個(gè)測(cè)試集上執(zhí)行此操作,為我們提供了衡量每個(gè)模型準(zhǔn)確性的方法,并將最終結(jié)果打印出來(lái)。

import pandas as pdimport requestsimport json#Import the test data and split the data from the labelstest = pd.read_csv('./data/fashion-mnist_test.csv', header=0)y_test = test['label']X_test = test.drop(['label'],axis=1)#Build the inference requestinference_request = { "inputs": [ { "name": "predict", "shape": X_test.shape, "datatype": "FP64", "data": X_test.values.tolist() } ]}#Send the prediction request to the relevant model, compare responses to training labels and calculate accuracydef infer(model_name, version): endpoint = f"http://localhost:8080/v2/models/{model_name}/versions/{version}/infer" response = requests.post(endpoint, json=inference_request) #calculate accuracy correct = 0 for i, prediction in enumerate(json.loads(response.text)['outputs'][0]['data']): if y_test[i] == prediction: correct = 1 accuracy = correct / len(y_test) print(f'Model Accuracy for {model_name}: {accuracy}')infer("fashion-xgboost", "v1")infer("fashion-sklearn", "v1")1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.

結(jié)果表明,XGBoost 模型略微優(yōu)于 SVM scikit-learn 模型:

Model Accuracy for fashion-xgboost: 0.8953Model Accuracy for fashion-sklearn: 0.8641.2.

總結(jié)

希望通過(guò)上面的描述,您已經(jīng)了解使用MLServer服務(wù)模型大致過(guò)程。如果需要了解更多信息,您需要閱讀相關(guān)文檔并查看不同框架的示例。

對(duì)于MLFlow用戶而言,可以使用 MLServer 直接在 MLFlow 中提供模型,如果您是Kubernetes用戶,您應(yīng)該了解Seldon Core ,它是一個(gè)將模型部署到Kubernetes?的開(kāi)源工具(它在后臺(tái)使用 MLServer) 。

譯者介紹

崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開(kāi)發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。曾任惠普技術(shù)專家。樂(lè)于分享,撰寫了很多熱門技術(shù)文章,閱讀量超過(guò)60萬(wàn)?!斗植际郊軜?gòu)原理與實(shí)踐》作者。

參考鏈接:https://dzone.com/articles/How-to-Utilize-Python-Machine-Learning-Models

來(lái)源:51CTO技術(shù)棧

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁(yè)
返回頂部
克拉玛依市| 安吉县| 彩票| 湘潭县| 井研县| 陆河县| 乌拉特前旗| 安国市| 嘉禾县| 吉木萨尔县| 阳高县| 克东县| 镇赉县| 金坛市| 乐山市| 无为县| 武义县| 新干县| 禹城市| 天长市| 宝坻区| 绍兴市| 新津县| 东平县| 襄汾县| 彰化县| 察雅县| 梅州市| 顺昌县| 临西县| 泾川县| 高唐县| 枣强县| 南华县| 高安市| 丁青县| 普洱| 上饶县| 普格县| 大庆市| 遂溪县|