Keras模型转成tensorflow的.pb操作


Posted in Python onJuly 06, 2020

Keras的.h5模型转成tensorflow的.pb格式模型,方便后期的前端部署。直接上代码

from keras.models import Model
from keras.layers import Dense, Dropout
from keras.applications.mobilenet import MobileNet
from keras.applications.mobilenet import preprocess_input
from keras.preprocessing.image import load_img, img_to_array
import tensorflow as tf
from keras import backend as K
import os
 
base_model = MobileNet((None, None, 3), alpha=1, include_top=False, pooling='avg', weights=None)
x = Dropout(0.75)(base_model.output)
x = Dense(10, activation='softmax')(x)
 
model = Model(base_model.input, x)
model.load_weights('mobilenet_weights.h5')
 
def freeze_session(session, keep_var_names=None, output_names=None, clear_devices=True):
 from tensorflow.python.framework.graph_util import convert_variables_to_constants
 graph = session.graph
 with graph.as_default():
  freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or []))
  output_names = output_names or []
  output_names += [v.op.name for v in tf.global_variables()]
  input_graph_def = graph.as_graph_def()
  if clear_devices:
   for node in input_graph_def.node:
    node.device = ""
  frozen_graph = convert_variables_to_constants(session, input_graph_def,
             output_names, freeze_var_names)
  return frozen_graph
 
output_graph_name = 'NIMA.pb'
output_fld = ''
#K.set_learning_phase(0)
 
print('input is :', model.input.name)
print ('output is:', model.output.name)
 
sess = K.get_session()
frozen_graph = freeze_session(K.get_session(), output_names=[model.output.op.name])
 
from tensorflow.python.framework import graph_io
graph_io.write_graph(frozen_graph, output_fld, output_graph_name, as_text=False)
print('saved the constant graph (ready for inference) at: ', os.path.join(output_fld, output_graph_name))

补充知识:keras h5 model 转换为tflite

在移动端的模型,若选择tensorflow或者keras最基本的就是生成tflite文件,以本文记录一次转换过程。

环境

tensorflow 1.12.0

python 3.6.5

h5 model saved by `model.save('tf.h5')`

直接转换

`tflite_convert --output_file=tf.tflite --keras_model_file=tf.h5`
output
`TypeError: __init__() missing 2 required positional arguments: 'filters' and 'kernel_size'`

先转成pb再转tflite

```

git clone git@github.com:amir-abdi/keras_to_tensorflow.git
cd keras_to_tensorflow
python keras_to_tensorflow.py --input_model=path/to/tf.h5 --output_model=path/to/tf.pb
tflite_convert \

 --output_file=tf.tflite \
 --graph_def_file=tf.pb \
 --input_arrays=convolution2d_1_input \
 --output_arrays=dense_3/BiasAdd \
 --input_shape=1,3,448,448
```

参数说明,input_arrays和output_arrays是model的起始输入变量名和结束变量名,input_shape是和input_arrays对应

官网是说需要用到tenorboard来查看,一个比较trick的方法

先执行上面的命令,会报convolution2d_1_input找不到,在堆栈里面有convert_saved_model.py文件,get_tensors_from_tensor_names()这个方法,添加`print(list(tensor_name_to_tensor))` 到 tensor_name_to_tensor 这个变量下面,再执行一遍,会打印出所有tensor的名字,再根据自己的模型很容易就能判断出实际的name。

以上这篇Keras模型转成tensorflow的.pb操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈Python中的数据类型
May 05 Python
Python中的字符串替换操作示例
Jun 27 Python
Python执行时间的计算方法小结
Mar 17 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
python3.5绘制随机漫步图
Aug 27 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
python实现ip地址的包含关系判断
Feb 07 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 Python
Django drf请求模块源码解析
Jun 08 Python
关于Python中进度条的六个实用技巧分享
Apr 05 Python
python如何进入交互模式
Jul 06 #Python
python3.4中清屏的处理方法
Jul 06 #Python
Python3基于print打印带颜色字符串
Jul 06 #Python
python判断是空的实例分享
Jul 06 #Python
python三引号如何输入
Jul 06 #Python
如何验证python安装成功
Jul 06 #Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 #Python
You might like
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
php异常处理捕获错误整理
2019/09/23 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
IE下js调试工具Companion.JS
2010/10/15 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
Python中使用asyncio 封装文件读写
2016/09/11 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
详解python读取和输出到txt
2019/03/29 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
python画环形图的方法
2020/03/25 Python
二年级语文教学反思
2014/02/02 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
员工年终考核评语
2014/12/31 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
爱国之歌(8首)
2019/09/29 职场文书
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫