首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流动质量化-零点意味着什么?

流动质量化-零点意味着什么?
EN

Stack Overflow用户
提问于 2019-10-24 08:25:56
回答 1查看 2.6K关注 0票数 1

我试图理解量化在丹索尔流和我遵循本教程。

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是量化的“零点”,它总是精确地映射到0.f.

我很难理解零点的含义,我希望有人能用一个例子来解释它。

EN

回答 1

Stack Overflow用户

发布于 2020-06-19 01:18:21

如果有负值数据,则零点可以抵消范围。所以如果你的零点是128,那么不缩放的负值-127到-1将用1到127表示,而正值0到127将表示为128到255。注q=0被有意地用于保持两端的范围对称(因此256-1而不是256)。

例如,给定一个数据从-1000到+1000之间的输入张量(包括两端都包含在内),以及其中一个值为39.215686275的元素,当使用128作为零点时,该元素的量化值将为133:

代码语言:javascript
复制
quantizedValue = round(realValue / scale + zeroPoint)
quantizedValue = round(39.215686275 / 7.843137255 + 128) = 133
quantizedValue = round(0            / 7.843137255 + 128) = 128
quantizedValue = round(1000         / 7.843137255 + 128) = 255
quantizedValue = round(-1000        / 7.843137255 + 128) = 1

其中:

代码语言:javascript
复制
zeroPoint = 128  ## Note 256/2 is symmetric, and q=0 isn't really used.
                 ## Use same zero point for entire tensor.
scale = (realRangeMaxValue - -realRangeMinValue) / quantizedRange
scale = (1000 - -1000) / 255 = 7.843137255
## Alternately could use inverse scale and multiply above, inverseScale = 0.1275

realRangeMinValue = -1000
realRangeMaxValue = 1000
quantizedRange = 2^8 - 1 = 255
quantizedRangeMinValue = integerRangeMinValue - zeroPoint = -128
quantizedRangeMaxValue = integerRangeMaxValue - zeroPoint = 127

相反:

代码语言:javascript
复制
realValue = (quantizedValue - zeroPoint) * scale
realValue = (133 - 128) * 7.843137255 = 39.215686275
realValue = (128 - 128) * 7.843137255 = 0
realValue = (255 - 128) * 7.843137255 = 1000
realValue = (1   - 128) * 7.843137255 = -1000
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58537188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档