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中用has_key()方法查找键是否存在的教程
May 21 Python
python字符串,数值计算
Oct 05 Python
python3.4用函数操作mysql5.7数据库
Jun 23 Python
浅谈python装饰器探究与参数的领取
Dec 01 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
python实现图片识别汽车功能
Nov 30 Python
python爬虫获取百度首页内容教学
Dec 23 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
学python需要去培训机构吗
Jul 01 Python
Python通过format函数格式化显示值
Oct 17 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
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
Jquery ui css framework
2010/06/28 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
python实时监控cpu小工具
2018/06/21 Python
在python中用url_for构造URL的方法
2019/07/25 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
校长竞聘演讲稿
2014/05/16 职场文书
节约用水的口号
2014/06/20 职场文书
演讲稿的格式及范文
2014/08/22 职场文书