使用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 相关文章推荐
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
初步探究Python程序的执行原理
Apr 11 Python
python中的装饰器详解
Apr 13 Python
python生成验证码图片代码分享
Jan 28 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
DataFrame.to_excel多次写入不同Sheet的实例
Dec 02 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
怎么用Python识别手势数字
Jun 07 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
PHP 开源框架22个简单简介
2009/08/24 PHP
PHP clearstatcache()函数详解
2010/03/02 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
PHP过滤黑名单关键字的方法
2014/12/01 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
jquery创建div 实现代码
2009/04/27 Javascript
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
python实现用户登录系统
2016/05/21 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
基于python历史天气采集的分析
2019/02/14 Python
Python字符串对象实现原理详解
2019/07/01 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
如何用PHP实现邮件发送
2012/12/26 面试题
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
儿科护理实习自我鉴定
2013/09/19 职场文书
工地安全质量标语
2014/06/07 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
个人作风建设总结
2014/10/23 职场文书
入党函调证明材料
2014/12/24 职场文书
工作报告范文
2019/06/20 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs