0

我有一个 TF 模型,它经过量化训练、冻结、使用 TOCO 转换为 tflite,现在我有了 TFLite HTML 图形模型和 json。

我可以看到,对于图中的每个张量,每个张量都有量化属性(最小值、最大值、比例、零点),我试图确定这些属性中的每一个如何应用于每个张量。

例如,我了解量化数据的表示,并且我可以理解采用量化的权重/偏差,乘以比例并添加最小值会返回原始的权重/偏差(几乎)。

我不明白的是:

  • 为什么有些张量具有量化属性(例如 Relu、Sigmoid)但没有内在参数(例如权重和偏差)?是因为它们是输出张量并且在数据输入到下一个操作之前应用了量化吗?
  • 在通过模型的数据流期间在哪些点(如果有)应用量化?例如,假设有一个浮点图像张量通过了 conv2d 操作 - weights/bias/relu 的量化属性在哪里以及如何用于获取 conv2d 操作的输出?

本质上,如果我将 TFLite 模型数据解析为一个 numpy 数组,那么我需要了解关于通过网络的数据流(关于量化)的所有信息,以便从头开始重新创建模型进行推理.

我似乎找不到任何关于此的文档。任何帮助,将不胜感激。

4

1 回答 1

2

卷积内循环执行 uint8 值的 macc。还有一个较小的外部循环用于计算 macc 的 z 偏移部分。在每个内核卷积结束时,您需要使用 input_scale * kernel_scale / output_scale 的缩减乘数从 int32 累加器缩减到 8 位 uint8 范围。这三个比例值是在训练期间学习的,位于 tflite 推理文件中。本文解释了这些操作。 http://openaccess.thecvf.com/content_cvpr_2018/papers/Jacob_Quantization_and_Training_CVPR_2018_paper.pdf

于 2018-10-12T22:04:17.847 回答