Tensorflowlite学习(一)tflite模型的生成

吕文林
2023-12-01

一、软件选择版本如下:
python3.6 + TensorFlow1.13.1。

1、注意虽然TensorFlow也支持python3.7,但本人在导包时发现lite包无法在import tensorflow后得到。换用python3.6后问题解决。

2、一度选用TensorFlow1.5,但本人安装后tf.contrib.lite的包没有toco_convert方法,因此无法使用此环境搞tflite。PS:可以用dir( #要引入的包)看看引入的包有哪些方法

3、TensorFlow的下载地址为:https://pypi.tuna.tsinghua.edu.cn/simple/tensorflow/。对应的API为https://tensorflow.google.cn/lite/convert/python_api。由此API可知,1.31版本也算是 Tensorflow nightly 版本了。

二、模型转换的坑
在模型运行中,遇到了大量不支持的操作:

Converting unsupported operation: TensorArrayV3...
Converting unsupported operation: TensorArrayScatterV3...

如:ResourceGather、WrapDatasetVariant、TensorArrayV3、TensorArrayScatterV3、TensorArrayReadV3、TensorArrayGatherV3、TensorArraySizeV3、Enter、Exit等

在文档

https://www.tensorflowers.cn/t/6306、

http://www.qianjia.com/html/2018-07/27_299877.html

https://www.tensorflow.org/lite/guide/ops_custom等提出了解决的方法,那就是自己造轮子。。

官方在https://www.tensorflow.org/lite/guide/ops_compatibility 大谈兼容性,从中可见TensorFlowLite对RNN的支持还不行。。

三、尝试解决方案
升级到TensorFlow1.14?在 https://colab.research.google.com/drive/1FhMBJHynRVfd_o-q2JH6Wn867YmnomjY 中可见,tf1.14目前也没有解决这个问题。

于是不得不放弃RNN模型的部署...

四、问题的解决

最后选用了普通的全连接神经网络完成了tflite模型的获取。由于本文使用了karas,因此调用from_keras_model_file函数。

import tensorflow as tf
simple_model.save('MyModel.h5')  #训练处的神经网络模型
converter = tf.lite.TFLiteConverter.from_keras_model_file('MyModel.h5')
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

 

 类似资料: