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实现图像几何变换
Jul 06 Python
Python 爬虫学习笔记之多线程爬虫
Sep 21 Python
Python实现识别图片内容的方法分析
Jul 11 Python
python生成器与迭代器详解
Jan 01 Python
使用Python opencv实现视频与图片的相互转换
Jul 08 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
Python2与Python3的区别点整理
Dec 12 Python
Python版中国省市经纬度
Feb 11 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
Python爬取某平台短视频的方法
Feb 08 Python
Python下opencv库的安装过程及问题汇总
Jun 11 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 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” 彩蛋进行敏感信息获取
2013/08/07 PHP
开启PHP的伪静态模式
2015/12/31 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
js 单引号 传递方法
2009/06/22 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
layDate插件设置开始和结束时间
2018/11/15 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
python在命令行下使用google翻译(带语音)
2014/01/16 Python
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
python使用socket远程连接错误处理方法
2015/04/29 Python
利用python代码写的12306订票代码
2015/12/20 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
美国滑板店:Tactics
2020/11/08 全球购物
红色故事演讲稿
2014/05/22 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
门市房租房协议书
2014/12/04 职场文书
个人廉洁自律总结
2015/03/06 职场文书
2016年公务员六五普法心得体会
2016/01/21 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书