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生成指定尺寸缩略图的示例
May 07 Python
Django中URL视图函数的一些高级概念介绍
Jul 20 Python
Python 文件处理注意事项总结
Apr 10 Python
浅谈Python peewee 使用经验
Oct 20 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
Python读取二进制文件代码方法解析
Jun 22 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 Python
基于PyTorch中view的用法说明
Mar 03 Python
Python+Selenium自动化环境搭建与操作基础详解
Mar 13 Python
Python Numpy库的超详细教程
Apr 06 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
PHP基本语法总结
2014/09/06 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
python清除指定目录内所有文件中script的方法
2015/06/30 Python
对pandas中to_dict的用法详解
2018/06/05 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
申报职称专业技术个人的自我评价
2013/12/12 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
教师考核表个人总结
2015/02/12 职场文书
教师聘用意向书
2015/05/11 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
周一给客户的问候语
2015/11/10 职场文书
2016中秋节问候语
2015/11/11 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android