首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorflowLite中的量化卷积层运算

TensorflowLite中的量化卷积层运算
EN

Stack Overflow用户
提问于 2021-12-09 15:20:06
回答 1查看 229关注 0票数 -1

我想了解在TensorflowLite中量化模型的卷积层所做的基本运算。

作为基线,我选择了一个经过预先训练的Tensorflow模型,高效网络-lite0-int8,并使用一个样本图像作为模型推理的输入。在此之后,我成功地提取了第一个融合ReLU6卷积层的输出张量,并将这个输出与我在上的定制python实现的输出进行了比较。

这两个张量之间的偏差很大,我无法解释的是,Tensorflow的输出张量并不像预期的那样在0,6的范围内(我预计这是因为Conv层中的融合ReLU6层)。

,你能给我提供一个更详细的描述一个量化的融合Relu6 Conv2D层在TensorflowLite?中的操作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-17 11:26:33

之后,仔细研究了Tensorflow的github存储库,发现了kernel_util.cc文件和CalculateActivationRangeUint8函数。所以使用这个函数,我设法理解了为什么量子化的融合ReLu6 Conv2D层的输出张量不是在0,6之间,而是在-128,127个值之间。为了记录在案,我用一些简单的步骤实现了一个Conv2D层的操作。

  • 首先,您需要使用interpreter.get_tensor_details()命令获取层的参数(内核、偏差、尺度、偏移),并使用GetQuantizedConvolutionMultipler和QuantizeMultiplierSmallerThanOne函数计算QuantizeMultiplierSmallerThanOne。
  • 然后,在填充输入层之前减去输入偏移量,实现简单的卷积。
  • 稍后,您需要使用MultiplyByQuantizedMultiplierSmallerThanOne函数,该函数使用吉姆洛普/Fiedpoint.h库中的SaturatingRoundingDoublingHighMul和RoundingDivideByPOT。
  • 最后,将output_offset添加到结果中,并使用从CalculateActivationRangeUint8函数获取的值对其进行剪辑。

项目github页面上的问题链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70292380

复制
相关文章

相似问题

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