Tensorflow Lite从入门到精通( 五 )

更多细节请参考:Tensorflow官方文档 训练后动态范围量化
全整型量化整型量化是将32位浮点数 转换为8位定点数 。这样可以缩减模型大小并加快推理速度,这对低功耗设备(如微控制器)很有价值 。仅支持整数的加速器(如Edge TPU)也需要使用此数据格式 。
对于全整数量化,需要校准或估算模型中所有浮点张量的范围,即 (min, max) 。与权重和偏差等常量张量不同,模型输入、激活(中间层的输出)和模型输出等变量张量不能校准,除非我们运行几个推断周期 。因此,转换器需要一个有代表性的数据集来校准它们 。这个数据集可以是训练数据或验证数据的一个小子集(大约 100-500 个样本) 。请参阅下面的  representative_dataset() 函数 。
从 TensorFlow 2.7 版本开始,您可以通过签名指定代表数据集,示例如下:

Tensorflow Lite从入门到精通

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

文章插图
def representative_dataset():  for data in dataset:    yield {      "image": data.image,      "bias": data.bias,    }如果给定的 TensorFlow 模型中有多个签名,则可以通过指定签名密钥来指定多个数据集:
Tensorflow Lite从入门到精通

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

文章插图
def representative_dataset():  # Feed data set for the "encode" signature.  for data in encode_signature_dataset:    yield (      "encode", {        "image": data.image,        "bias": data.bias,      }    )  # Feed data set for the "decode" signature.  for data in decode_signature_dataset:    yield (      "decode", {        "image": data.image,        "hint": data.hint,      },    )您可以通过提供输入张量列表来生成代表性数据集:
Tensorflow Lite从入门到精通

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

文章插图
def representative_dataset():  for data in tf.data.Dataset.from_tensor_slices((images)).batch(1).take(100):    yield [tf.dtypes.cast(data, tf.float32)]从 TensorFlow 2.7 版本开始,我们推荐使用基于签名的方法,而不是基于输入张量列表的方法,因为输入张量排序可以很容易地翻转 。
出于测试目的,您可以使用如下所示的虚拟数据集:
Tensorflow Lite从入门到精通

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

经验总结扩展阅读