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的yield和generator
Mar 10 Python
python装饰器初探(推荐)
Jul 21 Python
Python实现的递归神经网络简单示例
Aug 11 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
pandas表连接 索引上的合并方法
Jun 08 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
python实现键盘控制鼠标移动
Nov 27 Python
python3实现表白神器
Apr 09 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
Tensorflow 多线程与多进程数据加载实例
Feb 05 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 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的日期与时间函数技巧
2008/04/24 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
iOS10推送通知开发教程
2016/09/19 PHP
Yii2单元测试用法示例
2016/11/12 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
基于jQuery架构javascript基础体系
2011/01/01 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
用C++封装MySQL的API的教程
2015/05/06 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
建筑行业的大学生自我评价
2013/12/08 职场文书
继电保护工岗位职责
2014/01/05 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
简历自我评价优缺点
2015/03/11 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
Python爬虫基础讲解之请求
2021/05/13 Python