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牛刀小试密码爆破
Feb 03 Python
用Python实现一个简单的线程池
Apr 07 Python
Python3实现Web网页图片下载
Jan 28 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
Python列表切片用法示例
Apr 19 Python
Python爬虫小技巧之伪造随机的User-Agent
Sep 13 Python
用Python实现读写锁的示例代码
Nov 05 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
浅析python函数式编程
Sep 26 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/25 PHP
PHP 编写的 25个游戏脚本
2009/05/11 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
Display SQL Server Version Information
2007/06/21 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
python 实现删除文件或文件夹实例详解
2016/12/04 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
python实现BackPropagation算法
2017/12/14 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
Python 类的魔法属性用法实例分析
2019/11/21 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
软件测试面试题
2015/10/21 面试题
个人简历的自荐信
2013/10/23 职场文书
本科毕业生自我鉴定
2013/11/02 职场文书
面包店的创业计划书范文
2014/01/16 职场文书
大二学生职业生涯规划书
2014/02/05 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
小学生大队委竞选稿
2015/11/20 职场文书