0

我正在训练一个我想在量化的 8 位环境(微控制器)中使用 TFLite 部署的 Keras 模型。为了提高量化性能,我进行了量化感知训练。然后,我使用我的验证集作为代表性数据集创建量化的 TFLite 模型。使用验证集评估性能并在此图像中说明:

不同条件下各批次 20 次运行的错误率

如果不是简单地从 QA 训练的模型(图中的红色)生成 TFLite 模型(图中的青色),我将权重从 QA 训练的模型复制到原始模型,然后生成 TFLite 模型以解决问题(图中的紫色),这给出了稍微不同的预测。这是为什么?

我知道 TFLite 模型与 QA 训练的模型略有不同,因为转换使用基于验证集的训练后量化。但是如果网络的结构、权重和偏差相同,量化不应该相同吗?

子问题:为什么 TFLite 模型平均比正常的 Keras 模型略差?由于我正在对验证集进行量化和评估,如果有的话,我希望它能够人为地表现得更好。

4

1 回答 1

0

听起来您正在结合训练后量化和量化意识训练。如果我理解正确,您正在训练一个量化模型,然后将浮点权重仅复制到原始浮点模型,然后运行训练后量化。

这个过程有点奇怪——问题是模型的量化版本也量化了激活,因此仅复制权重不会产生相同的精确网络。量化 TF 模型使用的激活量化参数最终可能与从代表性数据集计算的参数不同,并会导致不同的答案。

我认为您可以期望 QAT 模型比生成的 TFLite 模型更好,因为经过训练的激活量化参数。

我建议解决您之前的问题,这将导致更好的解决方案和更高的准确性。

于 2021-03-04T08:40:49.527 回答