层 (....) 作为 Conv 算子的输入,产生输出数组 model/re_lu_1/Relu,缺少最小/最大数据,这是量化所必需的。如果准确性很重要,要么针对非量化输出格式,要么使用您的模型从浮点检查点运行量化训练,以更改输入图以包含最小/最大信息。如果您不关心准确性,可以传递 --default_ranges_min= 和 --default_ranges_max= 以方便实验。
问问题
588 次
1 回答
0
对于tensorflow 1.x来说,如果要量化,就得放上假量化节点来激活模型的量化。量化有3个阶段:
- 训练部分:将模型加载到图表 => 通过 contrib 创建训练图表 => 训练并存储权重 ckpt
- 评估部分:将您的模型加载到没有权重的图表 => 创建评估图表 => 恢复图表 => 导出到冻结模型
- Toco/tflite 将冻结模型转换为量化模型
但是,最重要的因素是模型中的 batch_normalization 的配置。在尝试了多种配置后,最好的方法是使用 batch_normalization 而不使用tensorflow.keras.layers
. 原因是因为 Tensorflow 想要避免折叠结果被量化。因此,batchnorm 后面的激活将不起作用。[这里][1]中的详细信息
简而言之,这个层应该只附加在tensorflow.keras.layers.Conv2D
with parsed activation param 下,即 Relu/Relu6/Identity
如果进行上述过程:Conv2d=>Activation=>BatchNorm
该层不会产生错误does not have MinMax information
于 2020-09-01T03:58:51.307 回答