将keras模型部署到服务器上

keras是基于TensorFlow的,所以可以先将其转为TensorFlow的模型,再部署。

关于TensorFlow模型的部署可以看我的另一篇博客将TensorFlow模型部署到服务器上 

下面是keras转TensorFlow的参考代码

# -*- coding: utf-8 -*-
from keras.layers.core import Activation, Dense, Flatten
from keras.layers.embeddings import Embedding
from keras.layers.recurrent import LSTM
from keras.layers import Dropout
from keras.layers.wrappers import Bidirectional
from keras.models import Sequential,load_model
from keras.preprocessing import sequence
from sklearn.model_selection import train_test_split
import collections
from collections import defaultdict
import numpy as np
import sys
# reload(sys)
# sys.setdefaultencoding('utf-8')
import tensorflow as tf
import os
import os.path as osp
from keras import backend as K
def freeze_session(session, keep_var_names=None, output_names=None, clear_devices=True):
	from tensorflow.python.framework.graph_util import convert_variables_to_constants
	graph = session.graph
	with graph.as_default():
		freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or []))
		output_names = output_names or []
		output_names += [v.op.name for v in tf.global_variables()]
		input_graph_def = graph.as_graph_def()
		if clear_devices:
			for node in input_graph_def.node:
				node.device = ""
		frozen_graph = convert_variables_to_constants(session, input_graph_def,output_names, freeze_var_names)
		return frozen_graph
input_fld = './model/'
weight_file = 'facenet_keras.h5'
output_graph_name = 'tensor_model.pb'

output_fld = input_fld + 'tensorflow_model/'
if not os.path.isdir(output_fld):
	os.mkdir(output_fld)
weight_file_path = osp.join(input_fld, weight_file)

K.set_learning_phase(0)
net_model = load_model(weight_file_path)


print('input is :', net_model.input.name)
print ('output is:', net_model.output.name)

sess = K.get_session()

frozen_graph = freeze_session(K.get_session(), output_names=[net_model.output.op.name])
from tensorflow.python.framework import graph_io

graph_io.write_graph(frozen_graph, output_fld, output_graph_name, as_text=False)

print('saved the constant graph (ready for inference) at: ', osp.join(output_fld, output_graph_name))

#

from tensorflow.python.saved_model import signature_constants
from tensorflow.python.saved_model import tag_constants

export_dir = './model/saved_model'
graph_pb = './model/tensorflow_model/tensor_model.pb'

builder = tf.saved_model.builder.SavedModelBuilder(export_dir)
with tf.gfile.GFile(graph_pb, "rb") as f:
	graph_def = tf.GraphDef()
	graph_def.ParseFromString(f.read())

sigs = {}

with tf.Session(graph=tf.Graph()) as sess:
	# name="" is important to ensure we don't get spurious prefixing
	tf.import_graph_def(graph_def, name="")
	g = tf.get_default_graph()
	inp = g.get_tensor_by_name(net_model.input.name)
	out = g.get_tensor_by_name(net_model.output.name)
	sigs[signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY] = \
		tf.saved_model.signature_def_utils.predict_signature_def({"in": inp}, {"out": out})

	builder.add_meta_graph_and_variables(sess,[tag_constants.SERVING],signature_def_map=sigs)

builder.save()

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以给出以下的设计与实现方案: ## 设计方案: 1. 首先,需要准备好一个已经训练好的模型,可以使用 Keras, PyTorch, TensorFlow 等深度学习框架进行模型训练。 2. 使用 Flask 框架来搭建一个 Web 服务器,以便提供 API 接口供用户使用。 3. 创建一个用于加载模型的 Python 文件,在其中加载模型并定义用于预测的函数。 4. 在 Flask 中,使用 `@app.route` 装饰器来定义 API 接口路径,将用户请求的数据传递给预测函数,获取预测结果并返回给用户。 ## 实现步骤: 1. 安装 Flask 框架:可以使用 pip 包管理器进行安装,具体命令为 `pip install Flask`。 2. 在项目目录下创建一个 Python 文件,用于加载模型并定义预测函数。例如,可以创建一个名为 `model.py` 的文件。 3. 在 `model.py` 文件中使用深度学习框架来加载模型,例如 TensorFlow 可以使用 `tf.keras.models.load_model` 函数来加载模型。然后,定义一个预测函数,接收用户请求的数据,经过预处理后进行模型预测,最后返回预测结果。 4. 在 Flask 中,使用 `@app.route` 装饰器来定义 API 接口路径,例如可以定义一个名为 `/predict` 的接口路径。 5. 在接口路径中,使用 `request` 模块获取用户请求的数据,并传递给预测函数进行预测。 6. 获取预测结果后,使用 `jsonify` 函数将结果转换为 JSON 格式,并返回给用户。 以下是一个简单的示例代码: ```python from flask import Flask, request, jsonify from model import predict app = Flask(__name__) @app.route('/predict', methods=['POST']) def predict_api(): data = request.json result = predict(data) return jsonify(result) ``` 其中,`model.py` 文件中的 `predict` 函数需要根据具体的模型进行定义,例如: ```python import tensorflow as tf model = tf.keras.models.load_model('my_model.h5') def predict(data): # 数据预处理代码 ... # 模型预测代码 result = model.predict(inputs) # 结果后处理代码 ... return result ``` 以上就是一个基于 Flask 框架使用 Python 进行模型部署的设计与实现方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值