使用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中让MySQL查询结果返回字典类型的方法
Aug 22 Python
Python的Flask框架中实现分页功能的教程
Apr 20 Python
python使用range函数计算一组数和的方法
May 07 Python
Python使用shelve模块实现简单数据存储的方法
May 20 Python
pyenv命令管理多个Python版本
Mar 26 Python
Python内置函数delattr的具体用法
Nov 23 Python
django输出html内容的实例
May 27 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
Feb 16 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执行速度全攻略(下)
2006/10/09 PHP
织梦模板标记简介
2007/03/11 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
PHP错误机制知识汇总
2016/03/24 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
vue-router 按需加载 component: () =&gt; import() 报错的解决
2020/09/22 Javascript
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
python多进程共享变量
2016/04/06 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
python读取当前目录下的CSV文件数据
2020/03/11 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
少先队学雷锋活动月总结
2014/03/09 职场文书
教师读书活动总结
2014/05/07 职场文书
收银员岗位职责
2015/02/03 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书