【发布时间】:2020-06-22 10:57:50
【问题描述】:
我用一个卷积层构建了一个简单的 CNN 模型,并使用 Tensorflow Lite 对其进行了转换。 (对于 MNIST !!) 所以现在我的模型得到 8 位整数输入,权重也是 8 位整数。
我想测试从 TFLite 得到的参数,所以我为推理步骤编写了 C 代码。
输入图像像素被赋予 0 到 255 之间的 8 位整数,权重在 -128 到 127 之间。 (偏差是 32 位整数。) 当然,卷积结果由大于 255 的数字组成。
我查看了这篇论文(https://arxiv.org/pdf/1712.05877.pdf,“用于高效整数运算的神经网络的量化和训练”),它提供了一些关于如何处理这个卷积结果的提示。 它说我必须 (1) 缩小规模, (2)向下(到 uint8),和 (3) 应用激活函数生成8位输出。
据我了解,我需要将 2^(-n) 乘以卷积结果。 所以我将卷积输出划分为 256 并将最大数量限制为 255,并使用全连接层的权重进一步计算它们。
它显示了一个很好的结果(准确度0.96+),但它没有TFLite评估所说的那么高。 (精度 0.98+)
我认为我没有以正确的方式做到这一点,因为“256”(我将卷积输出划分为)是一个随机数。实际上,当我将其更改为 340 时,它显示了最好的结果,但仍远低于使用 TFLite Interpreter 进行的 TFLite 评估。
实现推理步骤的正确且复杂的方法是什么?如何缩小规模?
【问题讨论】:
标签: tensorflow-lite inference quantization inference-engine