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爬取51job中hr的邮箱
May 14 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
Jun 09 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
Django中create和save方法的不同
Aug 13 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
wxpython绘制圆角窗体
Nov 18 Python
适合Python初学者的一些编程技巧
Feb 12 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
Python3爬虫里关于代理的设置总结
Jul 30 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代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
smarty内置函数section的用法
2015/01/22 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
PHP微商城开源代码实例
2019/03/27 PHP
javascript中直接写php代码的方法
2013/07/31 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
十分钟带你快速了解React16新特性
2017/11/10 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
python使用PyFetion来发送短信的例子
2014/04/22 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
Python实现名片管理系统
2020/02/14 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
大学生创业感言
2014/01/25 职场文书
销售活动策划方案
2014/08/26 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
2015年材料员工作总结
2015/04/30 职场文书
预备党员转正意见
2015/06/01 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang