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的内存泄漏及gc模块的使用分析
Jul 16 Python
Python远程桌面协议RDPY安装使用介绍
Apr 15 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
如何使用Python实现斐波那契数列
Jul 02 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
Django框架之中间件MiddleWare的实现
Dec 30 Python
python实现吃苹果小游戏
Mar 21 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 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
php在数组中查找指定值的方法
2015/03/17 PHP
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
vue上传图片组件编写代码
2017/07/26 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
Python中List.count()方法的使用教程
2015/05/20 Python
详解Python爬虫的基本写法
2016/01/08 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python 使用多属性来进行排序
2019/09/01 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
电脑租赁公司创业计划书
2014/01/08 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
python随机打印成绩排名表
2021/06/23 Python
MySQL存储过程及语法详解
2022/08/05 MySQL
MySQL新手入门进阶语句汇总
2022/09/23 MySQL