Tensorflow Lite从入门到精通

TensorFlow Lite 是 TensorFlow 在移动和 IoT 等边缘设备端的解决方案,提供了 Java、Python 和 C++ API 库,可以运行在 Android、iOS 和 Raspberry Pi 等设备上 。目前 TFLite 只提供了推理功能,在服务器端进行训练后,经过如下简单处理即可部署到边缘设备上 。
个人使用总结:

  1. 如果我们只使用Tensorflow的高级API搭建模型 , 那么将TF转TF Lite再转TF lite micro的过程会相对顺利 。但是如果我们的模型使用了自定义模块,那么转换过程会遇到很多麻烦,Tensorflow对自家高级API的转换提供了很好的支持,但对我们自己写的一些NN 算子支持不佳 。
  2. Tensorflow LSTM的流式部署是有难度的 , 请使用最新的Tensorflow版本,将unrool打开,再尝试
转换模型我们可以通过以下两种方式将Tensorflow模型 转换成 TF Lite:
  1. python_api" rel="external nofollow noreferrer">Python API(推荐 , 且本文主讲):它让您可以更轻松地在模型开发流水线中转换模型、应用优化、添加元数据,并且拥有更多功能 。
  2. 命令行:它仅支持基本模型转换 。
我们可以根据保存模型的方式来选择转换成TF lite的方式:
1、python/tf/lite/TFLiteConverter?hl=zh-cn#from_saved_model" rel="external nofollow noreferrer">tf.lite.TFLiteConverter.from_saved_model()(推荐):转换 SavedModel
Tensorflow Lite从入门到精通

文章插图
Tensorflow Lite从入门到精通

文章插图
import tensorflow as tf# 转换模型converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) # SavedModel目录的路径tflite_model = converter.convert()# 保存TF Lite模型with open('model.tflite', 'wb') as f:  f.write(tflite_model)2、python/tf/lite/TFLiteConverter?hl=zh-cn#from_keras_model" rel="external nofollow noreferrer">tf.lite.TFLiteConverter.from_keras_model():转换 Keras 模型
Tensorflow Lite从入门到精通

文章插图
Tensorflow Lite从入门到精通

文章插图
import tensorflow as tf# 使用高级API tf.keras.* 创建一个模型model = tf.keras.models.Sequential([    tf.keras.layers.Dense(units=1, input_shape=[1]),    tf.keras.layers.Dense(units=16, activation='relu'),    tf.keras.layers.Dense(units=1)])model.compile(optimizer='sgd', loss='mean_squared_error')  # 编译模型model.fit(x=[-1, 0, 1], y=[-3, -1, 1], epochs=5)  # 训练模型# 生成一个 SavedModel# tf.saved_model.save(model, "saved_model_keras_dir")# keras model to TFLiteconverter = tf.lite.TFLiteConverter.from_keras_model(model)tflite_model = converter.convert()# 保存模型with open('model.tflite', 'wb') as f:    f.write(tflite_model)3、python/tf/lite/TFLiteConverter?hl=zh-cn#from_concrete_functions" rel="external nofollow noreferrer">tf.lite.TFLiteConverter.from_concrete_functions():转换 具体函数
Tensorflow Lite从入门到精通

文章插图
Tensorflow Lite从入门到精通

文章插图
import tensorflow as tf# 使用低级API tf.* 创建一个模型class Squared(tf.Module):    @tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.float32)])    def __call__(self, x):        return tf.square(x)model = Squared()# 运行模型# result = Squared(5.0) # 25.0# 生成 SavedModel# tf.saved_model.save(model, "saved_model_tf_dir")concrete_func = model.__call__.get_concrete_function()# TF model to TFLite# 注意,对于TensorFlow 2.7之前的版本,# from_concrete_functions API能够在只有第一个参数的情况下工作:# > converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func], model)tflite_model = converter.convert()# 保存TFLite模型with open('model.tflite', 'wb') as f:    f.write(tflite_model)

推荐阅读