我正在尝试理解tensorflow 中的量子化,我正在遵循这个教程。
https://heartbeat.fritz.ai/8-bit-quantization-and-tensorflow-lite-speeding-up-mobile-inference-with-low-precision-a882dfcafbbd
在教程中,它说,量化方程是:
- r为真实的值(通常为float32)
- q是其量化表示,表示为B位整数(uint8、uint32等)
- S(float32)和z(uint)是我们缩放和移动数轴的因子。z是量化的“零点”,它总是精确地Map回0.f。
我很难理解零点的含义,希望有人能用例子解释一下?
1条答案
按热度按时间wooyq4lh1#
如果原始数据为负值,则零点可以偏移范围,允许将其存储为无符号整数。因此,如果零点为128,则未缩放的负值-127到-1可以表示为1到127。正值0到127可以用128到255表示。请注意0的量化值(或此处的输入-128)有意不使用,以保持两端的范围对称,因此总范围为256 - 1值,而不是256。
例如,给定数据范围为-1000至+1000(包括两端)的输入Tensor,以及其中值为39.215686275的元素,当使用128作为零点时,该元素的量化值将为133:
其中:
反之: