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

作者: skura 2019-11-21 15:35:28

 

照片由 Franck V 发布在 Unsplash 上

本文转自雷锋网,如需转载请至雷锋网官网申请授权。

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

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

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

ML 部署:

  • model / Train.py

  • app.py

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

  1. pip install Flask 
  2. pip install Flask-RESTful 

进展是不是很顺利?很好,现在让我们来看看好东西。

制作基本预测脚本

如果您正在遵循目录结构,那么现在应该打开 model/Train.py 文件。你先要加载虹膜数据集,并使用一个简单的决策树分类器来训练模型。训练完成后,我将使用 joblib 库保存模型,并将精度分数报告给用户。

这里并不复杂,因为机器学习不是本文的重点,这里只是模型部署。下面是整个脚本:

  1. from sklearn import datasets 
  2. from sklearn.tree import DecisionTreeClassifier 
  3. from sklearn.model_selection import train_test_split 
  4. from sklearn.metrics import accuracy_score 
  5. from sklearn.externals import joblib 
  6.  
  7. def train_model(): 
  8.    iris_df = datasets.load_iris() 
  9.  
  10.    x = iris_df.data 
  11.    y = iris_df.target 
  12.  
  13.    X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.25
  14.    dt = DecisionTreeClassifier().fit(X_train, y_train) 
  15.    preds = dt.predict(X_test) 
  16.  
  17.    accuracy = accuracy_score(y_test, preds) 
  18.    joblib.dump(dt, 'iris-model.model'
  19.    print('Model Training Finished.\n\tAccuracy obtained: {}'.format(accuracy)) 

部署

现在你可以打开 app.py 文件并执行一些导入操作。你需要操作系统模块:Flask 和 Flask RESTful 中的一些东西,它们是 10 秒前创建的模型训练脚本,你还要将它们和 joblib 加载到训练模型中:

  1. import os 
  2. from flask import Flask, jsonify, request 
  3. from flask_restful import Api, Resource 
  4. from model.Train import train_model 
  5. from sklearn.externals import joblib  

现在你应该从 Flask RESTful 中创建 Flask 和 Api 的实例。没什么复杂的:

  1. app = Flask(__name__) 
  2. api = Api(app) 

接下来要做的是检查模型是否已经训练好了。在 Train.py 中,你已经声明该模型将保存在文件  iris-model.model 文件中,并且如果该文件不存在,则应该首先对模型进行训练。训练完成后,可以通过 joblib 加载:

  1. if not os.path.isfile('iris-model.model'): 
  2.    train_model() 
  3.  
  4. 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 表示:

  1. class MakePrediction(Resource): 
  2.    @staticmethod 
  3.    def post(): 
  4.        posted_data = request.get_json() 
  5.        sepal_length = posted_data['sepal_length'
  6.        sepal_width = posted_data['sepal_width'
  7.        petal_length = posted_data['petal_length'
  8.        petal_width = posted_data['petal_width'
  9.  
  10.        prediction = model.predict([[sepal_length, sepal_width, petal_length, petal_width]])[0
  11.        if prediction == 0
  12.            predicted_class = 'Iris-setosa' 
  13.        elif prediction == 1
  14.            predicted_class = 'Iris-versicolor' 
  15.        else
  16.            predicted_class = 'Iris-virginica' 
  17.  
  18.        return jsonify({ 
  19.            'Prediction': predicted_class 
  20.        }) 

我们就快完成了,加油!你还需要声明一个路由,URL 的一部分将用于处理请求:

  1. api.add_resource(MakePrediction, '/predict'

最后一件事是告诉 Python 去调试模式运行应用程序:

  1. if __name__ == '__main__'
  2.    app.run(debug=True) 

这样做就对了。你可以通过 Postman 或其他工具启动模型并进行预测。

为了防止你漏掉什么,这里是整个 app.py 文件,你可以参考:

  1. import os 
  2. from flask import Flask, jsonify, request 
  3. from flask_restful import Api, Resource 
  4. from model.Train import train_model 
  5. from sklearn.externals import joblib 
  6.  
  7. app = Flask(__name__) 
  8. api = Api(app) 
  9.  
  10. if not os.path.isfile('iris-model.model'): 
  11.    train_model() 
  12.  
  13. model = joblib.load('iris-model.model'
  14.  
  15. class MakePrediction(Resource): 
  16.    @staticmethod 
  17.    def post(): 
  18.        posted_data = request.get_json() 
  19.        sepal_length = posted_data['sepal_length'
  20.        sepal_width = posted_data['sepal_width'
  21.        petal_length = posted_data['petal_length'
  22.        petal_width = posted_data['petal_width'
  23.  
  24.        prediction = model.predict([[sepal_length, sepal_width, petal_length, petal_width]])[0
  25.        if prediction == 0
  26.            predicted_class = 'Iris-setosa' 
  27.        elif prediction == 1
  28.            predicted_class = 'Iris-versicolor' 
  29.        else
  30.            predicted_class = 'Iris-virginica' 
  31.  
  32.        return jsonify({ 
  33.            'Prediction': predicted_class 
  34.        }) 
  35.  
  36. api.add_resource(MakePrediction, '/predict'
  37.  
  38. if __name__ == '__main__'
  39.    app.run(debug=True) 

好的,你准备好了吗?

不错!导航到根目录(app.py 就在根目录中),启动终端并执行以下操作:

  1. python app.py 

大约一秒钟后,你将得到一个输出,显示应用程序正在本地主机上运行。

现在我将打开 Postman 并执行以下操作:

  • 将方法更改为 POST

  • 输入 localhost:5000/predict 作为 URL

  • 在 Body 选项卡中选择 JSON

  • 输入一些 JSON 进行预测

然后你可以点击发送:

瞧!几乎马上你就能从你的模型中得到预测。

写在最后

我希望你能看完这篇文章。如果你只是复制粘贴的所有内容,只要你安装了所有必需的库,那么应该就可以继续。

我强烈建议你在自己的数据集和业务问题上利用这些新获得的知识。如果你用 Python 以外的语言编写应用程序,并且使用 Python 只是为了数据和机器学习相关的东西,那么它就很有用了。

via:https://t.cn/AirsMxVF 

机器学习 人工智能 计算机
上一篇:人脸识别技术是什么?究竟有哪些场景应用? 下一篇:人工智能会在未来成为冷血的种族灭绝杀手吗?
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

人工智能在网络安全领域的应用

在最近3年人工智能则引发了一场商业革命,谷歌、微软、百度等互联网巨头以及众多的初创科技公司,纷纷加入人工智能战场,掀起一轮又一轮的智能化狂潮,人工智能技术已经开始应用在各行各业,在网络和安全领域的研究和应用也得到了各科技公司的重视,其应用价值开始浮现。

至顶网 ·  12h前
一文看懂人工智能的六个关键概念和实施AI项目的七个注意事项

您或许已经听说过机器学习和人工智能(AI)的前景。这两个技术概念,已经引起了全世界的关注。自动驾驶汽车、人形机器人、设备预测维护——这些应用不仅仅限于消费者领域,工业界也开始疯狂了。看看最近主要工业出版物的诸多头条新闻就知道了。

控制工程中文网 ·  13h前
期末高数有救了!AI帮你解方程

近日,Facebook AI宣布建立了第一个使用符号推理解决高级数学方程式的AI系统,准确率碾压Mathematica和Matla。期末高数有救了!

佚名 ·  1天前
关于人工智能,2020年必考的十大趋势

不知不觉,2019已彻底离我们远去,回顾过去的一年,人工智能毫无疑问是2019年的扛鼎关键词。

读芯术 ·  1天前
赢在起跑线,数据科学必备5大技能

数据科学领域竞争激烈,人们正在迅速发展越来越多的技能和经验。“R、Python、SQL和机器学习”一直是数据科学家的标配。但随着这个领域的发展,这些技能已经渐渐不足以在就业市场上保持竞争力了。

读芯术 ·  1天前
2020年人工智能如何发展?这6大趋势你不可不知

2019年是人工智能技术落地的狂欢之年!那么随着2019年的过去,2020年行业又将呈现出哪些新趋势呢?或者又将延续哪些新发展呢?我们不妨一起来看一下吧!

数字化企业 ·  1天前
AI教育就像莱特兄弟的飞行实验,梦想终会到来,只是需要时间

詹妮弗·特纳(Jennifer Turner)的代数课曾一度让人昏昏欲睡,她的许多学生都难以保持清醒。如今,新技术的出现,包括使用人工智能驱动的程序来辅助教学,学生们开始变得变得活跃起来,注意力也更加集中了。

李菁瑛 ·  1天前
AI 不再高大上 更贴近生活

进入到 2020 年,AI 在行业中的发展已经超脱了单纯技术创新和突破的范畴,而是走向产品和产业融合,并由此体现出商业回报价值。由此,AI 的商业化落地,越来越成为衡量一家科技巨头在技术战略、产品规划、生态构建等方面综合实力的关键指标。

I/O ·  1天前
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载