害怕部署机器学习模型?这里有一篇手把手教程
off999 2024-11-25 15:54 25 浏览 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
相关推荐
- linux操作系统安装步骤(linux系统详细安装步骤)
-
1.选择“中文(简体)”,然后点击“安装Ubuntu”。2.点击“继续”。3.然后点击“现在安装”。4.选择地址的时区,然后点击“继续”。5.选择“汉语”,然后点击“继续”。6.输入用户的名字。7.设...
- 苹果手机怎么设置定时关机(苹果手机怎么设置定时关机重启)
-
苹果手机可以设置定时关机,但无法设置定时开机。具体操作步骤如下:进入苹果手机自带的时钟。点击屏幕有下角的计时器。点击画面中间的计时结束启用选项。选择画面最下方的“停止播放”。之后再点击画面右上角的设定...
- 无线网wifi密码忘记了怎么办
-
忘记wifi密码后,可以在路由器后台查看。1.在浏览器的地址栏中,输入路由器上的管理地址,进入后台界面;2.在后台界面里,找到“无线设置”选项,点击它;3.在新界面里,点击wifi密码右侧的小眼睛图标...
-
- win7系统无法正常开机怎么办
-
解决方法如下1,出现无法启动的原因,要注意是开机启动不了,还是在进度条那里缓冲,过不去.如果是开机启动不了,那就要看一下内存条、电源等有没有问题?如果是在进度条那里,那就看下方的三种方法。2,第一种方法:1,开机按F8键.2,选择最近一次的...
-
2025-11-16 07:51 off999
- 现在装win7还需要激活吗(现在安装win7旗舰版还需密钥吗)
-
要激活 Windows7如果是预装在计算机中的,买来之后便不用激活,这里预装指的是在厂商那里。正版的Windows7安装到计算机中,有三十天的试用期,若要永久使用,就要使...
- 2025显卡性能排行榜天梯图(2020年显卡性能天梯图)
-
MacBookPro的显卡水平处于笔记本独立显卡Nvidia920M和940M之间。属于低端显卡级,玩玩LOL啥的还可以,其他的大型游戏就算了,MAC不适合打游戏。MacBookPro搭载的8代...
- 网络对时服务器(对时服务器端口)
-
对等网是指在网络中所有计算机的地位都是平等的,既是服务器也是客户机,所有计算机中安装的都是相同的单机操作系统如Windows98/XP/Vista/7等,它可以设置共享资源,但受连接数限制,一般是只允...
- 如何强制删除u盘文件(强制删除u盘内容)
-
1、电脑上下载安装安全杀毒类软件。2、使用强力卸载。3、找到U盘上需要卸载的文件,右击强力卸载可以卸载顽固型文件。4、被暂用的文件也删除不了可以退出U盘重启电脑重新开机插入U盘进行删除。5、不能删除的...
- directx官方下载win7(directx download)
-
点开始-----运行,输入dxdiag,回车后打开“DirectX诊断工具”窗口,进入“显示”选项卡,看一下是否启用了加速,没有的话,单击下面的“DirectX功能”项中的“启用”按钮,这样便打开了D...
- u盘视频无法播放怎么办(u盘上视频没办法播放)
-
解决办法:1.检查U盘存储格式是否为FAT32,如果不是,请将其格式化为FAT32; 2.检查U盘中视频文件是否损坏,如果有损坏文件,请尝试重新复制一份; 3.检查U盘中存储...
-
- 笔记本电脑无法正常启动怎么修复
-
1.可以解决。2.Windows未能启动可能是由于系统文件损坏、硬件故障或病毒感染等原因引起的。解决方法可以尝试使用Windows安全模式启动、修复启动、还原系统、重装系统等方法。3.如果以上方法都无法解决问题,可以考虑联系专业的电脑...
-
2025-11-16 04:03 off999
- 联想设置u盘为第一启动项(联想怎么设置u盘启动为第一启动项)
-
联想电脑设置u盘为第一启动项方法如下一、将电脑开机,开机瞬间按F2键进入bios设置界面二、在上面5个选项里找到boot选项,这里按键盘上左右键来移动三、这里利用键盘上下键选到USB选项,然后按F5/...
-
- 家用路由器哪个牌子最好信号最稳定
-
TP-LINK最好,信号最稳定。路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议,例如某个局域网使用的以太网协议,因特网使用的TCP/IP协议...
-
2025-11-16 03:03 off999
- 安卓纯净版系统(安卓的纯净模式)
-
安卓系统有纯净模式的,安卓系统必须有纯净模式的,刷入纯净版系统可以去除一些预装的应用和系统自带软件,提高手机的运行速度和使用体验。但需要注意的是刷机有一定风险,请确保你已经备份好手机数据并了解安装风险...
- deepin系统怎么安装软件(deepin操作系统怎么安装软件)
-
deepin是一个基于Linux的操作系统,它默认不支持APK应用。要在deepin上安装APK应用,需要先安装一个Android模拟器,例如Anbox,然后从GooglePlayStore或其他...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
