我是tensorflow和量化的新手,我正在尝试为两个int8输入实现量化矩阵操作。很好奇地想知道操作背后的数学原理。我在tensorflow中看到,他们只对uint8输入实现了同样的方法,想知道如何将其用于带符号的int8 matmul/conv2D。
更准确地说,我想知道如何获得matmul/conv2D操作的浮点输出范围。
任何帮助都将不胜感激。
发布于 2018-10-30 17:01:47
我对tensorflow中的量化进行了一些研究,并将其应用于将浮点运算转换为量化运算。
在我的例子中,我仍然有一个到网络的浮点输入。输入在进入量化操作之前被量化。Tensorflow喜欢尽可能长时间地保留浮点值,以便与浮点操作兼容。这也是为什么tensorflow在浮点输入量化为8位整数格式后保持最小和最大浮点范围的原因。量化后的最小和最大浮点值也是量化运算的输入。
在您的示例中,Quant_conv2d操作对输入进行卷积:
无符号8位数据表单qunatization
输出结果为:
新的浮点范围是根据核心值的范围和输入的范围,使用中说明的QuantizationRangeForMultiplication函数计算得出的:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/quantization_utils.h
如上所述,输出是带有最小和最大浮点值的32位,以映射到绝对值,并可能将8位量化格式转换回浮点数。
希望这对理解Tensorflow量化算法有帮助。
https://stackoverflow.com/questions/53003155
复制相似问题