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服务器端收发请求的实现代码
Sep 29 Python
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
编写Python脚本来实现最简单的FTP下载的教程
May 04 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
Python进阶之全面解读高级特性之切片
Feb 19 Python
Django中ORM外键和表的关系详解
May 20 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
Django 重写用户模型的实现
Jul 29 Python
基于python实现把图片转换成素描
Nov 13 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
Python 匹配文本并在其上一行追加文本
May 11 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
载入进度条 效果
2006/07/08 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
python简单程序读取串口信息的方法
2015/03/13 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python hook监听事件详解
2018/10/25 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
儿子婚宴答谢词
2014/01/09 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
单位授权委托书范文
2014/08/02 职场文书
单位租房协议书范本
2014/12/04 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
幼儿园辞职书
2015/02/26 职场文书
Tomcat用户管理的优化配置详解
2022/03/31 Servers