Batch Normalization Quantize Tensorflow 1.x 没有 MinMax 信息

Batch Normalization Quantize Tensorflow 1.x does not have MinMax information

作为生成输出数组 model/re_lu_1/Relu 的 Conv 运算符的输入的层 (....) 缺少量化所必需的 min/max 数据。如果准确性很重要,要么以非量化输出格式为目标,要么使用模型从浮点检查点进行 运行 量化训练,以更改输入图以包含 min/max 信息。如果你不关心准确性,你可以通过 --default_ranges_min= 和 --default_ranges_max= 来进行简单的实验。

对于tensorflow1.x来说,如果要量化,就得放置假的量化节点来激活模型的量化。 量化分为 3 个阶段:

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

然而,最重要的因素是模型中 batch_normalization 的配置。尝试多种配置后,最好的配置是使用 batch_normalization 而没有来自 tensorflow.keras.layers 的融合选项。 原因是因为 Tensorflow 想要避免折叠结果被量化。因此,batchnorm 后面的激活将不起作用。 [此处][1]

中的详细信息

简而言之,这一层应该只附加在 tensorflow.keras.layers.Conv2D 下,解析后的激活参数是 Relu/Relu6/Identity

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

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