Python实现模型持久化和加载方式

1.JSON(JavaScript Object Notation)格式

import json
data = [{'a':1, 'b':2, 'c':3, 'd':4, 'e':5}]
print(data)
print(type(data))

在这里插入图片描述

data_dumps = json.dumps(data) #把python对象编码成json字符串
print(data_dumps)
print(type(data_dumps))

在这里插入图片描述

f = open('data.json', 'w')
f.write(data_dumps)
f.close()
f = open('data.json', 'r')
data = f.readlines()
print(type(data[0])) #data是一个字符串
json_loads = json.loads(data[0]) #将json字符串解码为python对象
print(type(json_loads))
print(json_loads)

在这里插入图片描述

2.pickle模块

pickle 提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。pickle 模块只能在 Python 中使用,Python 中几乎所有的数据类型(列表、字典、集合、类等)都可以用 pickle 来序列化。pickle 序列化后的数据,可读性差,一般无法识别。

import pickle
data = [{'a':1, 'b':2, 'c':3, 'd':4, 'e':5}]

with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)
    
#pickle.dump(obj, file[, protocol]):序列化对象,并将结果数据流写入到文件对象中。参数 protocol 是序列化模式,默认值为0,表示以文本的形式序列化。protocol 的值还可以是1或2,表示以二进制的形式序列化。

with open('data.pkl', 'rb') as f:
    model = pickle.load(f)
    
#pickle.load(file):反序列化对象。将文件中的数据解析为一个 Python 对象。
    

3.sklearn中的joblib模块

from sklearn.externals import joblib
joblib.dumb(model, model_path) #模型保存 joblib.load(model_path) #模型加载

Flask和Bottle微服务框架

1.Bottle Bottle 是一个非常小巧但高效的微型 Python Web 框架,它被设计为仅仅只有一个文件的 Python 模块,并且除 Python 标准库外,它不依赖于任何第三方模块。

Bottle 本身主要包含以下四个模块,依靠它们便可快速开发微 Web 服务:

路由(Routing):将请求映射到函数,可以创建十分优雅的 URL; 模板(Templates):可以快速构建 Python
内置模板引擎,同时还支持 Mako、Jinja2、Cheetah 等第三方模板引擎; 工具集(Utilites):用于快速读取 form
数据,上传文件,访问 Cookies,Headers 或者其它 HTTP 相关的 metadata; 服务器(Server):内置 HTTP
开发服务器,并且支持 paste、fapws3、 bjoern、Google App Engine、Cherrypy 或者其它任何 WSGI
HTTP 服务器。

2.Flask Flask 也是一个 Python 编写的 Web 微框架,可以让我们使用 Python 语言快速实现一个网站或 Web 服务。并使用方式和 Bottle 相似,Flask 依赖 Jinja2 模板和 Werkzeug WSGI 服务。Werkzeug 本质是
Socket 服务端,其用于接收 HTTP 请求并对请求进行预处理,然后触发 Flask 框架,开发人员基于 Flask
框架提供的功能对请求进行相应的处理,并返回给用户,如果返回给用户的内容比较复杂时,需要借助 Jinja2
模板来实现对模板的处理,即将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

Bottle 和 Flask 在使用上相似,而且 Flask 的文档资料更全,发布的服务更稳定,因此下面重点以 Flask
为例,来说明模型的微服务发布过程。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_word():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

在这里插入图片描述

修改服务对应的 IP 地址和端口

#app.run(host='192.168.31.19',port=8088)
# joblib.dump(model,"C://Users//18703//Desktop//model.pkl") 
    from sklearn.externals import joblib
    import pandas as pd
    model_path = "C://Users//18703//Desktop//classification.pkl"
    model = joblib.load(model_path)
    sen =[[5.1, 3.5, 1.4, 0.2]]
    print(sen)
    print(model.predict(sen))

在这里插入图片描述

#模型和浏览器进行交互
from sklearn.externals import joblib
from flask import Flask,request
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/predict/<sen>') #增加预测接口,重新定义predict函数
def predict(sen):
    result = model.predict(sen)
    return str(result)

if __name__ == '__main__':
    model_path = "C://Users//18703//Desktop//classification.pkl"
    model = joblib.load(model_path) #启动之前先把模型加载到内存中
    app.run(host='127.0.0.1')

在这里插入图片描述

predict([[5.1, 3.5, 1.4, 0.2]])

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rubyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值