为什么从量化感知训练模型派生的 TFLite 模型不同于具有相同权重的普通模型?

Why is a TFLite model derived from a quantization aware trained model different different than from a normal model with same weights?

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

Error rate for various batches of 20 runs in different conditions

如果不是简单地从 QA 训练模型(图中红色)生成 TFLite 模型(图中青色),我将权重从 QA 训练模型复制到原始模型,然后生成 TFLite模型到 work around an issue(图中紫色),这给出了略有不同的预测。 这是为什么?

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

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

听起来您正在结合 post-training quantization 和 quantization aware 训练。如果我理解正确的话,你正在训练一个量化模型,然后只将浮点权重复制到原始浮点模型,然后 运行 post-训练量化。

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

我认为您可以预期 QAT 模型比生成的 TFLite 模型效果更好,因为训练有素的激活量化参数。

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