使用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处理PDF及生成多层PDF实例代码
Apr 24 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
python实现壁纸批量下载代码实例
Jan 25 Python
python设置值及NaN值处理方法
Jul 03 Python
python爬虫获取新浪新闻教学
Dec 23 Python
python实现顺时针打印矩阵
Mar 02 Python
详解python tkinter模块安装过程
Jan 06 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
Pytorch环境搭建与基本语法
Jun 03 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
Python使用内置函数setattr设置对象的属性值
Oct 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
用缓存实现静态页面的测试
2006/12/06 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
javascript 限制输入脚本大全
2009/11/03 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
详解Axios统一错误处理与后置
2018/09/26 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
简单的通用表达式求10乘阶示例
2014/03/03 Python
Django框架中方法的访问和查找
2015/07/15 Python
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
安全员岗位职责
2013/11/11 职场文书
武侯祠导游词
2015/02/04 职场文书
团员个人年度总结
2015/02/26 职场文书
新兵入伍决心书
2015/09/22 职场文书
Win11查看设备管理器
2022/04/19 数码科技
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python