0

层 (....) 作为 Conv 算子的输入,产生输出数组 model/re_lu_1/Relu,缺少最小/最大数据,这是量化所必需的。如果准确性很重要,要么针对非量化输出格式,要么使用您的模型从浮点检查点运行量化训练,以更改输入图以包含最小/最大信息。如果您不关心准确性,可以传递 --default_ranges_min= 和 --default_ranges_max= 以方便实验。

4

1 回答 1

0

对于tensorflow 1.x来说,如果要量化,就得放上假量化节点来激活模型的量化。量化有3个阶段:

  1. 训练部分:将模型加载到图表 => 通过 contrib 创建训练图表 => 训练并存储权重 ckpt
  2. 评估部分:将您的模型加载到没有权重的图表 => 创建评估图表 => 恢复图表 => 导出到冻结模型
  3. Toco/tflite 将冻结模型转换为量化模型

但是,最重要的因素是模型中的 batch_normalization 的配置。在尝试了多种配置后,最好的方法是使用 batch_normalization 而不使用tensorflow.keras.layers. 原因是因为 Tensorflow 想要避免折叠结果被量化。因此,batchnorm 后面的激活将不起作用。[这里][1]中的详细信息

简而言之,这个层应该只附加在tensorflow.keras.layers.Conv2Dwith parsed activation param 下,即 Relu/Relu6/Identity

如果进行上述过程:Conv2d=>Activation=>BatchNorm

该层不会产生错误does not have MinMax information

于 2020-09-01T03:58:51.307 回答