keras .h5转移动端的.tflite文件实现方式


Posted in Python onMay 25, 2020

以前tensorflow有bug 在winodws下无法转,但现在好像没有问题了,代码如下

将keras 下的mobilenet_v2转成了tflite

from keras.backend import clear_session
import numpy as np
import tensorflow as tf
clear_session()
np.set_printoptions(suppress=True)
input_graph_name = "../models/weights.best_mobilenet224.h5"
output_graph_name = input_graph_name[:-3] + '.tflite'
converter = tf.lite.TFLiteConverter.from_keras_model_file(model_file=input_graph_name)
converter.post_training_quantize = True
#在windows平台这个函数有问题,无法正常使用
tflite_model = converter.convert()
open(output_graph_name, "wb").write(tflite_model)
print ("generate:",output_graph_name)

补充知识:如何把Tensorflow模型转换成TFLite模型

深度学习迅猛发展,目前已经可以移植到移动端使用了,TensorFlow推出的TensorFlow Lite就是一款把深度学习应用到移动端的框架技术。

使用TensorFlowLite 需要tflite文件模型,这个模型可以由TensorFlow训练的模型转换而成。所以首先需要知道如何保存训练好的TensorFlow模型。

一般有这几种保存形式:

1、Checkpoints

2、HDF5

3、SavedModel等

保存与读取CheckPoint

当模型训练结束,可以用以下代码把权重保存成checkpoint格式

model.save_weights('./MyModel',True)

checkpoints文件仅是保存训练好的权重,不带网络结构,所以做predict时需要结合model使用

如:

model = keras_segmentation.models.segnet.mobilenet_segnet(n_classes=2, input_height=224, input_width=224)
model.load_weights('./MyModel')

保存成H5

把训练好的网络保存成h5文件很简单

model.save('MyModel.h5')

H5转换成TFLite

这里是文章主要内容

我习惯使用H5文件转换成tflite文件

官网代码是这样的

converter = tf.lite.TFLiteConverter.from_keras_model_file('newModel.h5')
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

但我用的keras 2.2.4版本会报下面错误,好像说是新版的keras把relu6改掉了,找不到方法

ValueError: Unknown activation function:relu6

于是需要自己定义一个relu6

import tensorflow as tf
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.utils import CustomObjectScope

def relu6(x):
 return K.relu(x, max_value=6)

with CustomObjectScope({'relu6': relu6}):
  converter = tf.lite.TFLiteConverter.from_keras_model_file('newModel.h5')
  tflite_model = converter.convert()
  open("newModel.tflite", "wb").write(tflite_model)

看到生成的tflite文件表示保存成功了

也可以这么查看tflite网络的输入输出

import numpy as np
import tensorflow as tf

# Load TFLite model and allocate tensors.
interpreter = tf.lite.Interpreter(model_path="newModel.tflite")
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

print(input_details)
print(output_details)

输出了以下信息

[{'name': 'input_1', 'index': 115, 'shape': array([ 1, 224, 224, 3]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0)}]

[{'name': 'activation_1/truediv', 'index': 6, 'shape': array([ 1, 12544, 2]), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0)}]

两个shape分别表示输入输出的numpy数组结构,dtype是数据类型

以上这篇keras .h5转移动端的.tflite文件实现方式)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python subprocess模块学习总结
Mar 13 Python
python解析中国天气网的天气数据
Mar 21 Python
Tensorflow之Saver的用法详解
Apr 23 Python
详解python 注释、变量、类型
Aug 10 Python
Python 移动光标位置的方法
Jan 20 Python
Python 装饰器原理、定义与用法详解
Dec 07 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
python跨文件使用全局变量的实现
Nov 17 Python
python 基于opencv操作摄像头
Dec 24 Python
实例讲解Python中sys.argv[]的用法
Jun 03 Python
python实现简单的聊天小程序
Jul 07 Python
Python虚拟环境venv用法详解
May 25 #Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 #Python
tensorflow转换ckpt为savermodel模型的实现
May 25 #Python
基于Python把网站域名解析成ip地址
May 25 #Python
使用keras和tensorflow保存为可部署的pb格式
May 25 #Python
Python使用configparser读取ini配置文件
May 25 #Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 #Python
You might like
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
解决vue移动端适配问题
2018/12/12 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
Python中的__init__作用是什么
2020/06/09 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS