【问题标题】:Can I add Tensorflow Fake Quantization in a Keras sequential model?我可以在 Keras 顺序模型中添加 Tensorflow 假量化吗?
【发布时间】:2019-02-21 16:30:47
【问题描述】:

我已经搜索了一段时间,但似乎 Keras 在模型训练后才具有量化功能。我希望将 Tensorflow 假量化添加到我的 Keras 序列模型中。根据 Tensorflow 的文档,我需要这两个函数来进行伪量化:tf.contrib.quantize.create_training_graph() 和 tf.contrib.quantize.create_eval_graph()。 我的问题是有人设法在 Keras 模型中添加这两个功能吗?如果是,应该在哪里添加这两个功能?例如,在 model.compile 之前或 model.fit 之后或其他地方?提前致谢。

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:

    我通过训练后量化来解决问题。由于我的最终目标是为移动设备训练 mdoel,而不是在训练期间进行虚假量化,因此我导出了 keras .h5 文件并直接转换为 Tenforflow lite .tflite 文件(将 post_training_quantize 标志设置为 true)。我在一个简单的 cifar-10 模型上对此进行了测试。原始的 keras 模型和量化的 tflite 模型具有非常接近的精度(量化的稍微低一点)。

    训练后量化:https://www.tensorflow.org/performance/post_training_quantization
    将 Keras 模型转换为 tensorflow lite:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/g3doc/python_api.md 在这里使用了 tf-nightly tensorflow:https://pypi.org/project/tf-nightly/

    如果你仍然想做假量化(因为对于某些模型,根据谷歌的说法,训练后的量化可能会给出很差的准确性),上周原始网页已关闭。不过你可以从github上找到:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/quantize

    更新:结果表明后量化并没有真正量化模型。 在推理过程中,它仍然使用 float32 内核进行计算。因此,我已切换到量化感知训练。对我的 cifar10 模型来说,准确度相当不错。

    【讨论】:

    • 嘿,你有使用 keras 进行量化感知训练的示例代码吗?我一直在努力让它发挥作用,但到目前为止没有太多成果。
    • @Deb 在 tensorflow github 中有一个很好的例子。链接是:github.com/tensorflow/tensorflow/tree/master/tensorflow/… 看看 train.py、models.py 和 freeze.py。它们包含量化意识训练的所有必要部分。
    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多