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爬取网站数据保存使用的方法
Nov 20 Python
python time模块用法实例详解
Sep 11 Python
Python使用Supervisor来管理进程的方法
May 28 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
May 25 Python
详解Python核心对象类型字符串
Feb 11 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
10招!看骨灰级Pythoner玩转Python的方法
Apr 15 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
python json load json 数据后出现乱序的解决方案
Feb 27 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
文件上传类
2006/10/09 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
js 设置选中行的样式的实现代码
2010/05/24 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
python装饰器与递归算法详解
2016/02/18 Python
python决策树之CART分类回归树详解
2017/12/20 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
对python中的高效迭代器函数详解
2018/10/18 Python
Python异常处理知识点总结
2019/02/18 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
开办加工厂创业计划书
2014/01/03 职场文书
政治学求职信
2014/06/03 职场文书
拔河比赛口号
2014/06/10 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
总经理检讨书范文
2015/02/16 职场文书
公司财务部岗位职责
2015/04/14 职场文书
如何写好闭幕词
2019/04/02 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
7个你应该知道的JS原生错误类型
2021/04/29 Javascript