使用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 相关文章推荐
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
python中装饰器级连的使用方法示例
Sep 29 Python
Android分包MultiDex策略详解
Oct 30 Python
python虚拟环境完美部署教程
Aug 06 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
python 6.7 编写printTable()函数表格打印(完整代码)
Mar 25 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
django 将自带的数据库sqlite3改成mysql实例
Jul 09 Python
python 实现压缩和解压缩的示例
Sep 22 Python
Python游戏开发实例之graphics实现AI五子棋
Nov 01 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
德劲1104的电路分析与改良
2021/03/01 无线电
第十二节 类的自动加载 [12]
2006/10/09 PHP
服务器端解压缩zip的脚本
2006/12/22 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
学习jQuey中的return false
2015/12/18 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
详解JS模块导入导出
2017/12/20 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
在Python中进行自动化单元测试的教程
2015/04/15 Python
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
python实现提取百度搜索结果的方法
2015/05/19 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python实现自动登录
2018/09/17 Python
python 接收处理外带的参数方法
2018/12/03 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
python 获取字典键值对的实现
2020/11/12 Python
面料业务员岗位职责
2013/12/26 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL