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处理字符串之isspace()方法的使用
May 19 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
神经网络理论基础及Python实现详解
Dec 15 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 Python
python os用法总结
Jun 08 Python
python+opencv像素的加减和加权操作的实现
Jul 14 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
python 用struct模块解决黏包问题
Nov 07 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
Python基础之tkinter图形化界面学习
Apr 29 Python
Python实现学生管理系统(面向对象版)
Jun 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仿ZOL分页类代码
2008/10/02 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
Python程序运行原理图文解析
2018/02/10 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
python如何为创建大量实例节省内存
2018/03/20 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
Python 学习教程之networkx
2019/04/15 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
Python中无限循环需要什么条件
2020/05/27 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
法学毕业生自荐信
2013/11/13 职场文书
活动总结报告怎么写
2014/07/03 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
MySQL约束超详解
2021/09/04 MySQL
Ruby处理CSV数据方法详解
2022/04/18 Ruby
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript