百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

害怕部署机器学习模型?这里有一篇手把手教程

toyiye 2024-07-03 02:03 12 浏览 0 评论

照片由 Franck V 发布在 Unsplash 上

阅读本文后,你将能够部署机器学习模型,并用你想要的编程语言进行预测。没错,你可以坚持使用 Python,也可以通过 Java 或 Kotlin 直接在你的 Android 应用程序中进行预测。另外,你可以直接在你的 web 应用程序中使用该模型——你有很多很多选择。为了简单起见,我会用 Postman。

不过,我不会解释如何将这个模型放到一个实时服务器上,因为选择太多了。该模型将在你的本地主机上运行,因此,你将无法从不同的网络访问它(但请随意使用 google 查询如何将模型部署到 AWS 或类似的东西上)。

我已经做了以下目录结构:

ML 部署:

  • model / Train.py

  • app.py

如果你已经通过 Anaconda 安装了 Python,那么你可能已经预先安装了所有库,除了 Flask。因此,启动终端并执行以下语句:

pip install Flaskpip 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

雷锋网年度评选——寻找19大行业的最佳AI落地实践

创立于2017年的「AI最佳掘金案例年度榜单」,是业内首个人工智能商业案例评选活动。雷锋网从商用维度出发,寻找人工智能在各个行业的最佳落地实践。

第三届评选已正式启动,关注微信公众号“雷锋网”,回复关键词“榜单”参与报名。详情可咨询微信号:xqxq_xq

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码