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使用xmlrpc实例讲解
Dec 17 Python
Python3里的super()和__class__使用介绍
Apr 23 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
初步认识Python中的列表与位运算符
Oct 12 Python
python requests 使用快速入门
Aug 31 Python
Python定时器实例代码
Nov 01 Python
python集合是否可变总结
Jun 20 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 Python
python自动统计zabbix系统监控覆盖率的示例代码
Apr 03 Python
python tkinter实现定时关机
Apr 21 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生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
js的event详解。
2006/09/06 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
jQuery基础知识小结
2014/12/22 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
js代码实现轮播图
2020/05/04 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
python 实现堆排序算法代码
2012/06/05 Python
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
python字符串的常用操作方法小结
2016/05/21 Python
python 字典(dict)按键和值排序
2016/06/28 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
24式加速你的Python(小结)
2019/06/13 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
安全检查与奖惩制度
2014/01/23 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
Python中for后接else的语法使用
2021/05/18 Python
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android