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 04 Python
python线程锁(thread)学习示例
Dec 04 Python
Python中zfill()方法的使用教程
May 20 Python
python查找指定具有相同内容文件的方法
Jun 28 Python
对于Python中RawString的理解介绍
Jul 07 Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
django Admin文档生成器使用详解
Jul 22 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
pytorch 6 batch_train 批训练操作
May 28 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读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
python getopt 参数处理小示例
2009/06/09 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
给分销商的致歉信
2014/01/14 职场文书
工作个人的自我评价
2014/01/14 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
小学运动会口号
2014/06/07 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
单位工作证明格式模板
2014/10/04 职场文书
实习科室评语
2015/01/04 职场文书
教师岗位职责
2015/02/03 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
JS的深浅复制详细
2021/10/16 Javascript
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸