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

作者:Mrzhang先森 时间:2022-11-11 16:42:03 

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……

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

来源:https://blog.csdn.net/zhanghao3389/article/details/90382557

标签:keras,tensorflow,保存,pb
0
投稿

猜你喜欢

  • SQL Group By分组后如何选取每组最新的一条数据

    2024-01-18 21:50:51
  • Golang创建构造函数的方法超详细讲解

    2024-05-08 10:15:27
  • python 线程的五个状态

    2021-05-15 10:24:33
  • Python程序暂停的正常处理方法

    2023-07-17 23:21:47
  • Oracle数据库下载及安装图文操作步骤

    2024-01-26 11:15:49
  • Python最基本的输入输出详解

    2023-11-27 16:49:24
  • Python中ROC曲线绘制

    2023-05-28 16:38:15
  • Python中.py文件打包成exe可执行文件详解

    2023-06-10 19:11:00
  • Python Json数据文件操作原理解析

    2022-10-27 19:00:32
  • Python必考的5道面试题集合

    2021-07-11 19:38:41
  • 一文带你深入理解Go语言中的sync.Cond

    2024-04-25 15:28:48
  • python实现将json多行数据传入到mysql中使用

    2022-12-28 06:41:51
  • 基于OpenCV实现视频循环播放

    2023-07-13 09:10:33
  • Go/Python/Erlang编程语言对比分析及示例代码

    2022-08-15 17:19:12
  • python matplotlib饼状图参数及用法解析

    2021-08-25 16:02:52
  • Django 博客实现简单的全文搜索的示例代码

    2023-12-07 10:09:19
  • python定时复制远程文件夹中所有文件

    2023-08-17 17:55:32
  • 在TensorFlow中屏蔽warning的方式

    2023-05-08 10:54:19
  • Python中的套接字编程是什么?

    2021-02-28 12:46:01
  • Python实现利用163邮箱远程关电脑脚本

    2023-08-29 10:08:08
  • asp之家 网络编程 m.aspxhome.com