尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何利用 Python 创建机器学习模型

如何利用 Python 创建机器学习模型 你有没有碰到过这种情形, 就是当你训练好了一个新的模型之后, 有时候你不想费心思去编写Flask Code那个 Web 框架, 也不想把模型进行容器化然后在其中运行它, 而是想着直接通过 API 去马上使用这个模型呢?要是你存在这个需求, 那必定就是想要去了解。它属于一个基于某种情况的推理服务器, 近期已然推出了GA也就是遗传算法的版本, 这可是一款专门针对生产环境而设计的具备高性能的服务器。运用它能够保证于本地开展模型构建, 和投入到生产环境里的模型维持一致。本文以几个图像模型为例向您介绍如何使用 。数据集我们所要运用的数据集是MNIST, 其含有70,000张灰度且为28x28像素的服装图像, 这些图像覆盖了10个不同的类别, 像上衣、连衣裙、外套、裤子这类。若您期望能再现本文之中所呈现的代码, 那就务必要确认去下载那些文件且把它们进行解压缩, 放置到名为 data 的地方, 鉴于文件体积极为庞大, 故而存储库里面将它们省略掉了。1.训练 -learn 模型起初, 我们会运用 -learn 框架去训练一个支持向量机, 也就是 SVM 模型。紧接着把模型存储到一个叫做 -MNIST 的文件里头。import pandas as pd from sklearn import svm import time import joblib #Load Training Data train pd.read_csv(../../data/fashion-mnist_train.csv, header0) y_train train[label] X_train train.drop([label], axis1) classifier svm.SVC(kernelpoly, degree4, gamma0.1) #Train Model start time.time() classifier.fit(X_train.values, y_train.values) end time.time() exec_time end-start print(fExecution time: {exec_time} seconds) #Save Model joblib.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算法并非格外适配大型数据集, 缘由在于它具备二次性质。依据您的硬件状况, 此示例里的模型将会耗费几分钟的时长来开展训练。2.服务于 -learn 模型依照上面提及的所有步骤, 我们最终成功获取到了一个名为MNIST的模型文件。紧接着要去探究一下, 究竟该以怎样的方式运用它来实现提供服务这一目的。首先通过如下命令安装 pip 。虽说额外的运行时组件属于可选择的范围, 然而在服务模型之际会相对更加顺畅, 并且我们同样会去安装 -Learn 以及 的扩展。完成pip - -操作后就需要添加如下两个配置文件1.json- 这包含服务器本身的配置。2所提到的名为model-.json- 的文件, 按照其名称所表达的含义来讲, 这个文件当中涵盖了那些用于运行的模型配置。对于.json文件只定义一个参数就足够了{ debug: true }1.2.3.那个model-.json文件, 是需要更多信息的, 原因在于, 那里边它需要去了解服务模型的相关信息。{ name: fashion-sklearn, implementation: mlserver_sklearn.SKLearnModel, parameters: { uri: ./Fashion_MNIST.joblib, version: v1 } }1.2.3.4.5.6.7.8.name参数给出了唯一标识符, 这在多模型服务场景里很有用, 稍后会提及。要定义用来预构建服务器的, 要是有的话。它跟用于训练模型的机器学习框架紧密关联。在我们的实例中用 -learn训练模型, 所以会用 -learn达成。配置得给出模型文件的位置以及版本号。凭借前面所进行那个配置, 能够借助以下命令来给我们的模型给予服务, 此命令为: start。就是这般容易, 当下已然使得模型在本地服务器上运转起来了, 此刻, 它已能够接纳诸如 HTTP 那般, 以及 gRPC其默认端口为 8080 和 8081的请求了。3.测试模型模型已被启动, 处于并且状态上是正常运行着的, 那么此刻我们来发送一些请求用于测试当下它的运转情况, 以此来了解运行情况。我们会通过如下URL 发送一个 POST 请求:8080/v2/////infer这个URL所表示的是, 去访问之前训练好的那个 -learn 模型, 在此处, 仅仅是要把带有 - 的模型名称予以替换, 与此同时, 还要把用 v1 进行替换。跟着下面的代码, 能呈现出怎样导入测试数据的情况, 接着是怎样向模型服务器发出请求的状况, 随后是怎样将结果跟实际标签进行比较的情形:import pandas as pd import requests #Import test data, grab the first row and corresponding label test pd.read_csv(../../data/fashion-mnist_test.csv, header0) y_test test[label][0:1] X_test test.drop([label],axis1)[0:1] #Prediction request parameters inference_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 response response requests.post(endpoint, jsoninference_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.运行上面的test.py之后会从 得到以下响应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.可从响应当中, 知道已生成了一个请求ID, 且自动添加了用于服务请求的模型以及版本的元数据, 在模型投入生产后, 收集类似的元数据有着相当的重要性, 这能让我们记录每个请求, 进而便利地去进行审计以及故障排除。您或许也留意到, 返回一个数组, 尽管于请求里仅发送了一行数据, 然而处理批量请求, 并一同返回, 而我们甚至能够借助一种称作自适应批处理的技术, 从而优化在生产环境里处理多个请求的方式。于之上述示例里头, 亦能够寻觅到模型所预测之结果。.data显示模型已为该样本标记作类别0 , 数值0便是对应着类别t-shirt/top。该样本真实标签同样为0亦如此这般, 所以模型经获正确之预测。4.训练 模型借由上面所举的例子, 我们知悉了怎样去运用, 从而创建单个模型, 紧跟着, 让我们瞧瞧如何去处理, 那些于不同框架里训练的多个模型。依旧使用 MNIST 数据集但这次将训练模型。import pandas as pd import xgboost as xgb import time #Load Training Data train pd.read_csv(../../data/fashion-mnist_train.csv, header0) y_train train[label] X_train train.drop([label], axis1) dtrain xgb.DMatrix(X_train.values, labely_train.values) #Train Model params { max_depth: 5, eta: 0.3, verbosity: 1, objective: multi:softmax, num_class : 10 } num_round 50 start time.time() bstmodel xgb.train(params, dtrain, num_round, evals[(dtrain, label)], verbose_eval10) end time.time() exec_time end-start print(fExecution time: {exec_time} seconds) #Save Model bstmodel.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.上头用在训练模型的代码, 跟先前拿来训练 -learn 模型的代码相像, 然而这一回, 模型为了适配的格式, 把它存成.json 文件了。5.服务多个模型某个具有的优点是对多模型服务予以支持, 这所表达的意思是, 针对部署的每一个ML模型, 并不需要去创建或者运行新的服务器, 运用上面构建而成的模型, 会把此功能利用起来, 同时为其提供服务。当开启之际, 它会于目录以及任何子目录之内寻找model-.json文件。要是您存有多个model-.json文件, 进而它会自动为全部文件予以服务。留意: 您依旧仅需指明根目录里的, 由服务器配置修饰的那个文件.json。这是目录结构的细分以供参考. ├── 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.请注意, 存在两个model-.json文件, 其中一个是提供给用于-learn模型的, 另一个则是供模型之用的。现在可以运行 start .它将开始处理两个模型的请求。[mlserver] INFO - Loaded model fashion-sklearn succesfully. [mlserver] INFO - Loaded model fashion-xgboost succesfully.1.2.6.测试多个模型的准确性当下, 在特定的某个地方, 存在两个模型在运行着, 我们能够借助测试集中所包含的样本, 去验证每一个模型的精确程度, 以此来确定其准确性。如下代码, 会向各个模型寄出一个含有完整测试集的批处理请求, 接着把预测值跟真实标签予以比较, 在整个测试集上开展此操作, 给我们提供了衡量每个模型准确性的办法, 随后将最终结果打印出来。import pandas as pd import requests import json #Import the test data and split the data from the labels test pd.read_csv(./data/fashion-mnist_test.csv, header0) y_test test[label] X_test test.drop([label],axis1) #Build the inference request inference_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 accuracy def infer(model_name, version): endpoint fhttp://localhost:8080/v2/models/{model_name}/versions/{version}/infer response requests.post(endpoint, jsoninference_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(fModel 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.结果表明 模型略微优于 SVM -learn 模型Model Accuracy for fashion-xgboost: 0.8953 Model Accuracy for fashion-sklearn: 0.8641.2.总结期望凭借上述的阐述, 您已然知悉运用服务模型的大致流程。要是想要知晓更多的讯息, 您就得去阅读相关的文档并且查看不同框架的示例。使用者那边, 能够依托利用把模型于当中予以提供, 假设各位恰是使用者本人, 应当知晓Core这一事物, 它属于一款把模型部署至所在之处的开源工具此物于后端运用着。译者介绍名为崔皓的人, 是51CTO社区的编辑, 身为资深架构师, 有着18年软件开发以及架构方面的经验, 还有10年分布式架构的经验, 曾担任过惠普的技术专家, 他乐于去分享, 撰写了好多热门技术文章, 这些文章阅读量超过60万, 他还是《分布式架构原理与实践》的作者。参考链接
返回列表