【译】Post-training 量化

Post-training 量化

Post-training 量化是一种能够减少模型大小,同时下降 3 倍延迟而且仍然可以保持模型精度的通常方法。Post-training量化将权重从浮点量化为 8 位精度。此技术在 TensorFlow Lite model converter 中做为一个功能选项被使用。python

import tensorflow as tf
converter = tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir)
converter.post_training_quantize = True
tflite_quantized_model = converter.convert()
open("quantized_model.tflite", "wb").write(tflite_quantized_model)
复制代码

在推理时,权重值从 8 位精度转换为浮点数,并使用浮点内核进行计算。此转换只执行一次并进行缓存以减小延迟。git

Commit suggestion Add suggestion to batchgithub

在推理时,权重值从 8 位精度转换为浮点数,并使用浮点内核进行计算。此转换只执行一次并进行缓存以减小延迟。api

为了进一步改善延迟,混合运算符动态地将激活量化为 8 位,并使用 8 位权重和激活函数执行计算。此种优化方式能够提供接近彻底定点推断时的延迟。可是,输出仍然使用浮点存储,所以混合运算的加速效果仍然小于彻底定点计算。混合操做可用于大多数计算密集型网络:数组

因为权重在训练后被量化,所以可能存在精度损失,特别是对于较小的网络。TensorFlow Lite model repository提供了为特定网络提供预训练的彻底量化模型。检查量化模型的准确性以验证任何精度上的下降是否在可接受的限度内是很重要的。这里有一个工具能够评估 TensorFlow Lite 模型精确度缓存

若是精确度降低幅度过大,能够考虑使用注重量化的训练bash

量化张量的表示

TensorFlow 将数字浮点数组转换为 8 位表示形式做为压缩问题。因为训练的神经网络模型中的权重和激活张量倾向于分布在相对小范围内的值。(例如,对于权重为 -15 到 +15 ,对于图像模型激活为 -500 到 1000 )。而且因为神经网络在处理噪声数据时具备健壮性,所以经过量化到一小组值引入的偏差将总体结果的精度保持在可接受的阈值内。选定的表示必须执行快速计算,尤为是在运行模型时产生的具备大量计算的大型矩阵乘法。网络

这用两个浮点表示,它存储对应于最低和最高量化值的整体最小值和最大值。量化阵列中的每一个条目表示该范围内的浮点值,在最小值和最大值之间线性分布。例如,当一个 8 位数组的最小值为 -10.0 ,最大值为 30.0f 时,其量化值表示以下:函数

量化值 浮点值
0 -10.0
128 10.0
255 30.0
表格 2: 量化值范围示例

这种表示方式的好处有:工具

  • 它有效地表示任意大小的范围。。
  • 数值无需对称。
  • 有符号数和无符号数都可被表示。
  • 线性扩展使乘法变得简单。
相关文章
相关标签/搜索