Tensorflow Lite从入门到精通( 二 )

转换RNN模型为TFLite由于 TensorFlow 中 RNN API 的变体很多,我们的转换方式包括两个方面:

  1. 为标准 TensorFlow RNN API(如 Keras LSTM)提供原生支持 。这是推荐的选项 。
  2. 提供 进入转换基础架构的接口,用于 插入用户定义的 RNN 实现并转换为 TensorFlow Lite 。我们提供了几个有关此类转换的开箱即用的示例 , 这些示例使用的是 lingvo 的 LSTMCellSimple和 LayerNormalizedLSTMCellSimpleRNN 接口 。
Tensorflow官方提供了一个一个非常棒的案例:Keras LSTM fusion Codelab.ipynb
运行推理TensorFlow Lite 推理通常遵循以下步骤:
  1. 加载模型
  2. 转换数据
  3. 运行推断
  4. 解释输出
import numpy as npimport tensorflow as tf# 加载TFLite模型并分配张量interpreter = tf.lite.Interpreter(model_path="converted_model.tflite")interpreter.allocate_tensors()input_details = interpreter.get_input_details()  # 输入output_details = interpreter.get_output_details()  # 输出input_shape = input_details[0]['shape']  # 获取输入的shapeinput_data = np.array(np.random.random_sample(input_shape), dtype=np.float32)interpreter.set_tensor(input_details[0]['index'], input_data)  # 输入给模型interpreter.invoke()  # 运行# 函数`get_tensor()`返回张量数据的副本# 使用`tensor()`来获得一个指向这个张量的指针output_data = interpreter.get_tensor(output_details[0]['index'])print(output_data)定义了Signature的TFLite 推理
Tensorflow Lite从入门到精通

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

文章插图
# -*- coding:utf-8 -*-# Author:凌逆战 | Never# Date: 2022/10/12""""""import tensorflow as tfclass TestModel(tf.Module):    def __init__(self):        super(TestModel, self).__init__()    @tf.function(input_signature=[tf.TensorSpec(shape=[1, 10], dtype=tf.float32)])    def add(self, x):        # 为方便起见,将输出命名为“result” 。        return {'result': x + 4}saved_model_path = './saved_models'tflite_path = 'content/test_variable.tflite'# 保存模型model = TestModel()# 您可以省略signatures参数 , 并且将创建一个名为'serving_default'的默认签名名 。tf.saved_model.save(model, saved_model_path,                    signatures={'my_signature': model.add.get_concrete_function()})# TF Model to TFLiteconverter = tf.lite.TFLiteConverter.from_saved_model(saved_model_path)tflite_model = converter.convert()with open(tflite_path, 'wb') as f:    f.write(tflite_model)# 加载TFLite模型interpreter = tf.lite.Interpreter(tflite_path)# 模型中只定义了一个签名,因此默认情况下它将返回签名# 如果有多个签名 , 我们就可以传递这个名字my_signature = interpreter.get_signature_runner()# my_signature 可以通过输入作为参数调用output = my_signature(x=tf.constant([1.0], shape=(1, 10), dtype=tf.float32))# 'output'是包含推理所有输出的字典,在本例中,我们只有一个输出'result' 。print(output['result'])优化模型Tensorflow Lite 和 Tensorflow Model Optimization Toolkit (Tensorflow模型优化工具包)提供了最小优化推理复杂性的工具,可将优化推断的复杂性降至最低 。深度神经网络的量化使用了一些技术,这些技术可以降低权重的精确表示,并且降低存储和计算 。 TensorFlow Model Optimization Toolkit 目前支持通过量化、剪枝和聚类进行优化 。
【Tensorflow Lite从入门到精通】剪枝:剪枝的工作原理是移除模型中对其预测影响很小的参数 。剪枝后的模型在磁盘上的大小相同,并且具有相同的运行时延迟 , 但可以更高效地压缩 。这使剪枝成为缩减模型下载大小的实用技术 。

推荐阅读