使用keras和tensorflow保存为可部署的pb格式


Posted in Python onMay 25, 2020

Keras保存为可部署的pb格式

加载已训练好的.h5格式的keras模型

传入如下定义好的export_savedmodel()方法内即可成功保存

import keras
import os
import tensorflow as tf
from tensorflow.python.util import compat
from keras import backend as K

def export_savedmodel(model):
 '''
 传入keras model会自动保存为pb格式
 '''
  model_path = "model/" # 模型保存的路径
  model_version = 0 # 模型保存的版本
  # 从网络的输入输出创建预测的签名
  model_signature = tf.saved_model.signature_def_utils.predict_signature_def(
    inputs={'input': model.input}, outputs={'output': model.output})
  # 使用utf-8编码将 字节或Unicode 转换为字节
  export_path = os.path.join(compat.as_bytes(model_path), compat.as_bytes(str(model_version))) # 将保存路径和版本号join
  builder = tf.saved_model.builder.SavedModelBuilder(export_path) # 生成"savedmodel"协议缓冲区并保存变量和模型
  builder.add_meta_graph_and_variables( # 将当前元图添加到savedmodel并保存变量
    sess=K.get_session(), # 返回一个 session 默认返回tf的sess,否则返回keras的sess,两者都没有将创建一个全新的sess返回
    tags=[tf.saved_model.tag_constants.SERVING], # 导出模型tag为SERVING(其他可选TRAINING,EVAL,GPU,TPU)
    clear_devices=True, # 清除设备信息
    signature_def_map={ # 签名定义映射
      tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: # 默认服务签名定义密钥
        model_signature # 网络的输入输出策创建预测的签名
    })
  builder.save() # 将"savedmodel"协议缓冲区写入磁盘.
  print("save model pb success ...")

model = keras.models.load_model('model_data/weight.h5') # 加载已训练好的.h5格式的keras模型
export_savedmodel(model) # 将模型传入保存模型的方法内,模型保存成功.

Tensorflow保存为可部署的pb格式

1、在tensorflow绘图的情况下,使用tf.saved_model.simple_save()方法保存模型

2、传入session

3、传入保存路径

4、传入输入占位符在inputs={“input_name”: 网络输入占位符变量}

5、传入输出变量在outputs={“output_name1”: 网络输出变量, “output_name2”: 网络输出变量}

即可成功保存为可部署的pb格式

tf.saved_model.simple_save(sess,
      "./model",
      inputs={"myInput": x}, # input_name可自定义,编码客户端时对应即可
      outputs={"myOutput": y})

保存好模型后会得到这样格式文件证明你保存没有问题了

variables/
  variables.data-*****-of-*****
  variables.index
saved_model.pb
print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert('点个赞吧')

补充知识:将Keras保存的HDF5或TensorFlow保存的PB模型文件转化为Inter Openvino使用的IR(.xml & .bin)文件

本blog依据英特尔官方手册《Model Optimizer Developer Guide》 翻译编写,经博主测试可用

intel NCS & OpenVINO

英特尔官方的NCS开发环境“OpenVINO”使用了名为Intermediate Representation(IR)的网络模型,其中.xml文件保存了网络的拓扑结构,而.bin文件以二进制方式保存了模型的权重w与偏差b。

首先我们需要配置Model Optimizer

如果是安装适用于所有框架的Model Optimizer:

在安装完OpenVINO后,我们找到以下位置:

<INSTALL_DIR>/deployment_tools/model_optimizer/install_prerequisites

运行以下命令:

对于Linux系统:

install_prerequisites.sh

对于Windows系统:

install_prerequisites.bat

如果只安装适用于特定框架的Model Optimizer:

在安装完OpenVINO后,我们找到以下位置:

<INSTALL_DIR>/model_optimizer/install_prerequisites

运行以下命令:

对于Caffe (Linux):

install_prerequisites_caffe.sh

对于Caffe (Windows):

install_prerequisites_caffe.bat

对于TensorFlow (Linux):

install_prerequisites_tf.sh

对于TensorFlow (Windows):

install_prerequisites_tf.bat

对于MXNet (Linux):

install_prerequisites_mxnet.sh

对于MXNet (Windows):

install_prerequisites_mxnet.bat

对于Kaldi (Linux):

install_prerequisites_kaldi.sh

对于Kaldi (Windows):

install_prerequisites_kaldi.bat

对于ONNX (Linux):

install_prerequisites_onnx.sh

对于ONNX (Windows):

install_prerequisites_onnx.bat

如果我们要将TensorFlow保存的PB模型转换为IR……

如果我们要将Keras保存的HDF5模型转换为IR……

博主电脑在英特尔返厂维修中 待更新……

以上这篇使用keras和tensorflow保存为可部署的pb格式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的三目运算符和not in运算符使用示例
Mar 03 Python
Python中列表(list)操作方法汇总
Aug 18 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
python3使用QQ邮箱发送邮件
May 20 Python
python中p-value的实现方式
Dec 16 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
Python Websocket服务端通信的使用示例
Feb 25 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
Sep 01 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 Python
Python使用configparser读取ini配置文件
May 25 #Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 #Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 #Python
keras模型保存为tensorflow的二进制模型方式
May 25 #Python
keras 如何保存最佳的训练模型
May 25 #Python
keras处理欠拟合和过拟合的实例讲解
May 25 #Python
python如何调用字典的key
May 25 #Python
You might like
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
使用Apache的rewrite
2021/03/09 Servers
客户端静态页面玩分页
2006/06/26 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
Python functools模块学习总结
2015/05/09 Python
Python进程间通信用法实例
2015/06/04 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
python超时重新请求解决方案
2019/10/21 Python
python 读取.nii格式图像实例
2020/07/01 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
体育教育专业自荐信范文
2013/12/20 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
Golang bufio详细讲解
2022/04/21 Golang