如何为量化的matmul / conv2D操作找到浮点输出范围

时间:2018-10-26 06:59:34

标签: python tensorflow floating-point quantization

我是张量流和量化的新手,正在尝试对两个int8输入实施量化的matmul操作。很想知道运算背后的数学原理。我在tensorflow中看到它们仅对uint8输入实现了相同的功能,想知道如何将其用于带符号的int8 matmul / conv2D。

更确切地说,我想知道如何为matmul / conv2D操作获取浮点输出范围。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我已经研究了张量流中的量化,并将其用于将浮点运算转换为量化运算。

就我而言,我仍然有一个浮点输入到网上。输入将在进入量化运算之前立即进行量化。 Tensorflow倾向于保持尽可能长的浮点值,以便与浮点操作兼容。 这也是为什么在浮点输入被量化为8位整数格式后,tensorflow保持最小和最大浮点范围的原因。 量化结果产生的最小和最大浮点值也输入到量化运算中。

在您的情况下,Quant_conv2d操作使用输入进行卷积:

  • 未签名的8位数据形式量化
  • 无符号8位量化内核值

输出为:

  • 结果为32位
  • 新的最小和最大范围为浮点值

使用以下代码中的QuantizationRangeForMultiplication函数,根据内核值范围和输入范围来计算新的浮动范围:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/quantization_utils.h

如前所述,输出为32位,具有最小和最大浮点值,以映射到绝对值,并可能将8位量化格式转换回浮点。

希望这有助于了解Tensorflow量化算法。