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 selenium UI自动化解决验证码的4种方法
Jan 05 Python
Python 12306抢火车票脚本
Feb 07 Python
python实现媒体播放器功能
Feb 11 Python
Python smtplib实现发送邮件功能
May 22 Python
Python机器学习库scikit-learn安装与基本使用教程
Jun 25 Python
Python函数和模块的使用总结
May 20 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
Python 数据可视化之Bokeh详解
Nov 02 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 Smarty生成EXCEL文档的代码
2008/08/23 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
php中上传文件的的解决方案
2018/09/25 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
python实现一次创建多级目录的方法
2015/05/15 Python
Python模拟三级菜单效果
2017/09/11 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
基于python监控程序是否关闭
2020/01/14 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
小英雄雨来观后感
2015/06/09 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书