使用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
投稿

猜你喜欢

  • python练习程序批量修改文件名

    2022-01-29 06:53:12
  • Python Django 简单分页的实现代码解析

    2021-11-05 13:27:38
  • Python利用memory_profiler实现内存分析

    2022-10-02 12:41:45
  • 微软建议的ASP性能优化28条守则(5)

    2008-02-27 13:54:00
  • python管理包路径之pycharm自动解决包路径注册

    2023-07-14 14:25:38
  • python学习教程之Numpy和Pandas的使用

    2022-12-14 12:41:06
  • Python定时任务工具之APScheduler使用方式

    2022-02-02 05:50:51
  • selenium + python 获取table数据的示例讲解

    2021-02-20 11:57:46
  • python 构造三维全零数组的方法

    2022-05-11 06:01:20
  • 九个Python列表生成式高频面试题汇总

    2023-06-04 20:09:51
  • IE下绝对定位的元素不能响应鼠标的bug修正

    2008-09-10 13:03:00
  • WEB打印分页类(JS)

    2008-01-22 14:02:00
  • CSS Hacks

    2008-07-20 13:04:00
  • python的time模块和datetime模块实例解析

    2023-11-13 09:54:56
  • 详解Python计算机视觉 图像扭曲(仿射扭曲)

    2021-06-13 15:57:43
  • Django media static外部访问Django中的图片设置教程

    2023-03-05 03:51:15
  • matplotlib bar()实现多组数据并列柱状图通用简便创建方法

    2022-12-11 11:59:15
  • python中main函数(主函数)相关应用例子

    2023-08-23 08:54:59
  • 巧制可全屏拖动的图片

    2008-05-09 19:34:00
  • python去除字符串中的空格、特殊字符和指定字符的三种方法

    2022-06-12 20:21:31
  • asp之家 网络编程 m.aspxhome.com