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之用while来循环
Oct 02 Python
Python列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
最基础的Python的socket编程入门教程
Apr 23 Python
python K近邻算法的kd树实现
Sep 06 Python
Django组件之cookie与session的使用方法
Jan 10 Python
在pycharm下设置自己的个性模版方法
Jul 15 Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
django框架forms组件用法实例详解
Dec 10 Python
python三引号如何输入
Jul 06 Python
python3实现简单飞机大战
Nov 29 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 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 SplObjectStorage使用实例
2015/05/12 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
vue实现微信分享功能
2018/11/28 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
python中正则表达式的使用方法
2018/02/25 Python
python文件拆分与重组实例
2018/12/10 Python
python Django 创建应用过程图示详解
2019/07/29 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
深圳-东方伟业笔试部分
2015/02/11 面试题
暑假家长评语大全
2014/04/17 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
感谢信范文大全
2015/01/23 职场文书
安全主题班会教案
2015/08/12 职场文书
mysql部分操作
2021/04/05 MySQL
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
AJAX实现省市县三级联动效果
2021/10/16 Javascript
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers