TFLITE计算scale、zero的一些体会

本文探讨了在移动端推理引擎建设中,特别是hexagon DSP上,如何利用TFLITE模型的min、max值来计算scale和zero点。在确保zero能被整数精确表示以降低量化误差的过程中,作者分享了遇到的挑战和TFLITE的Nudge代码。关键在于理解量化范围,尤其是fakequant节点的narrow_range参数对无符号8bit量化的影响。
摘要由CSDN通过智能技术生成

当前工作集中在移动端推理引擎的建设,目前主要在hexagon DSP上;使用自定义模型格式,目前仅支持tflite的转换,为了兼容其余平台,因此在自定义模型格式中使用的是tflite的min、max值,由于在实际计算过程中,需要的是scale和zero,因此需要使用min、max计算得到对应的scale、zero,在其中遇到一些困难,记录下来以便后续使用。

由min、max计算得到scale、zero,最重要的一点是调整min或max以使得zero能够被一个整数精确表达,主要是为了在zero padding中不引入量化误差,tflite的Nudge代码如下:

// Gymnastics with nudged zero point is to ensure that real zero maps to
// an integer, which is required for e.g. zero-padding in convolutional layers.
// Outputs nudged_min, nudged_max, nudged_scale.
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Nudge(
    const float min, const float max, const int quant_min, const int quant_max,
    float* nudged_min, float* nudged_max, float* scale) {
  const float quant_min_float = static_cast<float>(quant_min);
  const float quant_max_float = static_cast<float>(quant_max);
  *s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值