当前位置: 首页 > 知识库问答 >
问题:

为什么从量化感知训练模型导出的TFLite模型与具有相同权重的正常模型不同?

楚方伟
2023-03-14

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

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

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

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

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

共有1个答案

罗学真
2023-03-14

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

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

我认为,由于经过训练的量化参数用于激活,QAT模型比最终的TFLite模型工作得更好。

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

 类似资料:
  • 我正在开发一个端到端训练和量化感知的训练示例。使用CIFAR10数据集,我加载了一个预训练的MobilenetV2模型,然后使用TensorFlow指南中的代码来量化我的模型。整个过程适当结束后,我得到以下结果: 注意,我并没有更改我从TensorFlow指南中附带的代码,我只是使用了一个不同的数据集和模型。

  • 我正在开发一个需要ML模型集成的Android应用程序。为此,我使用TensorFlow lite进行部署。我使用基于自定义模型的暹罗网络进行输出,输出形状为[1 128]。当我在Google Colab上推断python中的tf lite模型时,输出[1 128]数字与我在Android设备上产生的数字不同。输入图像在两种推断以及输入和输出形状上都是相同的,但我在Android手机和Python

  • 这是我在Android Studio上导入的tensorflow Lite模型的代码: 在此处输入图像描述 这是我运行应用程序时的输出: 在此处输入图像描述 我不明白,怎么才能得到模型输出?? 更新: 输出是6个元素的浮点数组,但我想要的是 Largesse 元素的索引,我尝试了这样的代码: 在此处输入图像描述 对吗??我在每个预测上都得到相同的输出

  • 我的代码是: 我的数据如下: 我的结果是: 两个时代后它就卡在那里了。我能做些什么来防止它这么快卡住?

  • 在之前的描述中,我们通常把机器学习模型和训练算法当作黑箱子来处理。如果你实践过前几章的一些示例,你惊奇的发现你可以优化回归系统,改进数字图像的分类器,你甚至可以零基础搭建一个垃圾邮件的分类器,但是你却对它们内部的工作流程一无所知。事实上,许多场合你都不需要知道这些黑箱子的内部有什么,干了什么。 然而,如果你对其内部的工作流程有一定了解的话,当面对一个机器学习任务时候,这些理论可以帮助你快速的找到恰

  • 在之前的描述中,我们通常把机器学习模型和训练算法当作黑箱子来处理。如果你实践过前几章的一些示例,你惊奇的发现你可以优化回归系统,改进数字图像的分类器,你甚至可以零基础搭建一个垃圾邮件的分类器,但是你却对它们内部的工作流程一无所知。事实上,许多场合你都不需要知道这些黑箱子的内部有什么,干了什么。 然而,如果你对其内部的工作流程有一定了解的话,当面对一个机器学习任务时候,这些理论可以帮助你快速的找到恰