一,概述
深度学习模型在移动端的应用越来越多,tensorflow lite就是专门为tensorflow模型在移动端上线推断设计的框架。tensorflow 官方提供了不少cv的tflite模型,以及c++调用的例子。我们在这里以一个nlp的例子来从零实现到c++调用,并且以调用so动态库,用cmake编译的方式的来实现调用tflite模型进行预测。
二,模型训练
采用的例子是一个类似语言模型的例子,用上文预测当前词,详情见nlp_tflite/char_rnn。
在模型的构造过程中要注意一些问题,因为tensorflow lite为了轻量化(编译后的so文件只有2.7M大小),所以很多tensorflow中的operation都不支持,所以在编写模型的过程中需要注意,来说下当前碰到的点,当然肯定还有很多的坑没有碰到。
1),显示确定计算图中所有tensor的维度
我们在搭建模型时在使用tf.placeholder传入数据的时候,有时候会将维度指定为None,在用python训练和预测时会根据你传入的数据去动态的确定这个维度的值,如果你想转换成tflite模型,就必须确定输入的tensor的维度。因为在执行转换到tflite的时候需要明确指定输入的tensor的维度,否则会将第一个维度定为1(tflite会默认所有输入的tensor的第一个维度时batch_size,并赋值为1)。
计算图中的tensor同样要确定维度,一般来说输入的维度确定了,中间维度一定会是确定,但也有一些特殊的情况,这种我就碰到过,比如我传入一个标量sequence_len到模型中,标量的值是动态变化的(如序列