我可以在Keras顺序模型中添加Tensorflow伪量化吗?

时间:2018-09-17 17:29:51

标签: tensorflow keras

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

1 个答案:

答案 0 :(得分:3)

我通过训练后量化解决了问题。由于我的最终目标是为移动设备训练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的张量流:https://pypi.org/project/tf-nightly/

如果您仍然想进行假量化(由于某些模型,根据Google的说法,训练后量化可能会降低准确性),则原始网页已于上周关闭。但您可以从github找到它:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/quantize

更新:事实证明,量化后并没有真正量化模型。 在推理过程中,它仍然使用float32内核进行计算。因此,我已转向量化感知训练。对于我的cifar10模型,准确性非常好。