keras保存模型_h5模型转savedModel + tf_serving部署采坑记录

背景介绍:

使用keras_bert训练了模型,采用三种方式分别保存了模型结构、模型权重和完整模型,其中模型结构为json格式,模型权重和完整模型都是h5格式。tensorflow = 1.14,2.0以后貌似更加简单了

保存代码:

f782574fddd8d7614c228be32e8862e5.png

现在的需求是将h5模型转为SavedModel格式,并通过tf_serving部署。

Step1:格式转换

1.1 加载h5模型

参考:

keras模型保存和加载_fu6543210的博客-CSDN博客​blog.csdn.net
b79d2f9d8ac5ce22faedbe27e3abaefa.png

注意:使用原生keras,tf.keras出现意想不到的错误。

1.1.1 json、load_weights方式

除了json以外,还有yaml方法。这种保存的都是模型结构,无法直接进行inference,需要加载权重。API:keras.model.model_from_config,model.load_weights()。没有使用这种方法,就不过多展开。

1.1.2 完整模型加载

API:model = keras.models.load_model(‘模型路径’)

坑1:使用上述代码直接加载模型的时候会出现:ValueError: Unknown layer: TokenEmbedding

dc1730c3c1576015375e00f545883d9b.png

原因:keras_bert这个包的需求

解决:

from keras_bert import get_custom_objects
model = keras.models.load_model('model.h5', custom_objects = get_custom_objects())

如果还是出现ValueError: Unknown layer: xxx,很可能是因为你用了tf.keras

1.2 转为SavedModel

1.2.1 创建bulider、回复计算图

参考:

https://zhuanlan.zhihu.com/p/81999483​zhuanlan.zhihu.com

上面的链接有一些api使用会出错,我的代码如下

import keras.backend as K

K.set_learning_phase(0)

export_path = '../models_pb'

builder = tf.saved_model.Builder(export_path)
signature_def_map = {
            "predict": tf.saved_model.build_signature_def(
                # 根据自己模型的要求
                inputs = {"input0": tf.saved_model.build_tensor_info(model.input[0]),
                          "input1": tf.saved_model.build_tensor_info(model.input[1])},
                out
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值