【问题标题】:Quantizing a TensorFlow graph for inference量化 TensorFlow 图以进行推理
【发布时间】:2019-06-21 16:51:40
【问题描述】:

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

首先,我通过调用在我的图中引入假量化节点:

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

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

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

我得到这个错误:

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

事实上,在构建图表时,我有效地添加了一个 AdamOptimizer 来训练我的模型:

train_step = tf.train.AdamOptimizer(1e-4).minimize(...)

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

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

提前致谢

【问题讨论】:

    标签: python tensorflow tensorflow-lite quantization


    【解决方案1】:

    这可能有点复杂,但您需要创建两个独立且不同的图表,一个用于训练,一个用于导出。查看 this gist 获取训练示例,然后使用量化感知训练、导出和转换进行微调。

    步骤 1)

    在训练图中,您可以正常创建直到损失的所有内容,然后在使用优化器添加 train_op 之前调用 tf.contrib.quantize.create_training_graph(...)。训练您的模型然后创建一个检查点,您可以通过tf.estimator API 或定期在tf.Session 中执行此操作。


    第 2 步)

    然后你需要创建一个推理图,你甚至不在这里将损失函数仅仅作为模型的推理部分。之后调用tf.contrib.quantize.create_eval_graph(...) 添加量化操作。 最后,您只需从训练中创建的检查点恢复,然后导出为所需的格式,无论是frozengraph 还是 savedmodel。


    步骤 3)

    使用 toco 将 freezedgraph/savedmodel 转换为 tflite。

    【讨论】:

    • 太棒了,它成功了!非常感谢。顺便说一句,我还有一个担心。因为我试图量化一个玩具模型,我可以在几秒钟内轻松地从头开始训练(只有几个卷积层和全连接层),我实际上跳过了“微调”部分。但是,如果我有一个 .pb 格式的预训练模型,我是否能够使用量化感知训练对其进行量化,而无需从头开始重新训练或影响其准确性?因为我的意思是,为了获得量化信息,无论如何你都需要向模型提供一些训练数据,那么该怎么做呢?
    • 如果你只有一个frozengraph,我想可以加载它然后内联操作它,但我从未尝试过。您需要做的是检查 tf.contrib.quantize 函数实际添加了哪些操作,然后尝试模拟它。我估计这将是很多工作。
    • 如果您有构建图形的代码,那么在正确的位置使用create_*_graph 函数从头开始重新构建它要简单得多,然后只需从现有检查点热启动变量即可。如果您查看要点,第一个 train.py 脚本实际上并没有添加任何与量化有关的内容。所以第一个检查点只有常规训练的权重,没有添加量化信息。
    • 您好,现在 tf 升级到 v2,他们删除了 contrib,这意味着 quantize 消失了,请问,这两个 quantize 函数的当前替代方案是什么:create_training_graph 和 @987654331 @。谢谢
    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2018-07-28
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多