【问题标题】:How to find float output range for quantized matmul/conv2D operation如何找到量化 matmul/conv2D 操作的浮点输出范围
【发布时间】:2018-10-26 06:59:34
【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: python tensorflow floating-point quantization


    【解决方案1】:

    我对 tensorflow 中的量化进行了一些研究,并将其应用于将浮点运算转换为量化运算。

    在我的情况下,我仍然有一个浮点输入到网络。输入在进入量化操作之前被量化。 Tensorflow 倾向于尽可能长时间地保持浮点值,以便与浮点操作兼容。 这也是为什么 tensorflow 在浮点输入量化为 8 位整数格式后保持最小和最大浮点范围的原因。 作为量化结果的最小和最大浮点值也是量化操作的输入。

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

    • 无符号8bit数据形式量化
    • 无符号 8 位量化内核值

    输出是:

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

    使用 QuantizationRangeForMultiplication 函数根据内核值的范围和输入的范围计算新的浮点范围:

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

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

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

    【讨论】:

    • 您好威廉,非常感谢您分享您的观点。我确实了解了 tensorflow 如何实现 QuantizationRangeForMultiplication 并注意到它适用于 uint8 输入,但我希望它适用于 int8 输入。我不确定它背后的数学原理。如果您能帮助我理解数学以使 QuantizationRangeForMultiplication 也适用于 int8 输入,那将非常高兴
    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2022-11-12
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多