我正在尝试量化我的模型(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网页和教程以及其他论坛上都找不到关于此的任何帮助。希望你能帮帮我
预先感谢
答案 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。