量化TensorFlow图以进行推理

时间:2019-06-21 16:51:40

标签: python tensorflow tensorflow-lite quantization

我正在尝试量化我的模型(CNN),以便将其转换为量化的.tflite模型。 我正在通过https://github.com/tensorflow/tensorflow/tree/r1.13/tensorflow/contrib/quantize#quantization-aware-training

关注该教程。

首先,我通过调用以下方法在图形中引入伪量化节点:

<resource-file src="platforms/android/app/src/main/AndroidManifest.xml" target="AndroidManifest.xml" />

但是,最后,我尝试调用此函数以确保图形以正确的格式导出了量化信息:

tf.contrib.quantize.create_training_graph(quant_delay=500)

我收到此错误:

tf.contrib.quantize.create_eval_graph(input_graph=tf.get_default_graph())

实际上,在构建图形时,我有效地添加了AdamOptimizer来训练我的模型:

ValueError: Training op found in graph, exiting {'ApplyAdam'}

如何解决该问题?该错误似乎表明我应该删除Adam优化器,尽管我需要它进行培训。

我在TensorFlow网页和教程以及其他论坛上都找不到关于此的任何帮助。希望你能帮帮我

预先感谢

1 个答案:

答案 0 :(得分:1)

可能涉及到一点,但是您需要创建两个单独且不同的图形,一个用于训练,另一个用于导出。请查看this gist中的训练示例,然后通过了解量化的训练,导出和转换进行调整。

第1步)

在训练图中,您通常会创建丢失的所有内容,然后调用tf.contrib.quantize.create_training_graph(...),然后将train_op添加到优化器中。训练模型,然后建立检查点,您可以通过tf.estimator API或定期在tf.Session中进行检查。


第2步)

然后,您需要创建一个推理图,您甚至在这里甚至不使损失函数成为模型的推理部分。之后,调用tf.contrib.quantize.create_eval_graph(...)添加量化操作。 最终,您只需从训练中创建的检查点中恢复,然后导出为所需的格式,即可冻结图或保存的模型。


第3步)

使用toco将冻结的图/保存的模型转换为tflite。