模型压缩之post-training quantization
一,post-training quantization的工作原理
在底层,通过将参数(即神经网络权重)的精度从训练时的32位浮点表示降低到更小、更高效的8位整数表示来运行优化(也称为量化)。
post-training量化指南:https://www.tensorflow.org/performance/post_training_quantization这些优化将确保将最终模型中精度降低的操作定义与使用fixed-point和floating-point数学混合的内核实现配对。这将以较低的精度快速执行最繁重的计算,但是以较高的精度执行最敏感的计算,因此通常会导致任务的最终精度损失很小,甚至没有损失,但相比纯浮点执行而言速度明显提高。对于没有匹配的“混合”内核的操作,或者工具包认为必要的操作,它会将参数重新转换为更高的浮点精度以便执行。
二,post-training quantization作用:对于在内存紧张、功耗限制和存储有限的设备上提供模型的TensorFlow Lite开发人员来说,这些技术尤其重要,优化模型以减小尺寸,降低延迟和功耗,同时使精度损失可以忽略不计。
post-training模型量化(post-training quantization)。对于相关的机器学习模型,这可以实现最多4倍的压缩和3倍的执行速度提升。
通过量化模型,开发人员还将获得降低功耗的额外好处。这对于将模型部署到手机之外的终端设备是非常有用的。
三,启用 post-training quantization
post-training quantization技术已集成到TensorFlow Lite转换工具中。入门很简单:在构建了自己的TensorFlow模型之后,开发人员可以简单地在TensorFlow Lite转换工具中启用“post_training_quantize”标记。假设保存的模型存储在saved_model_dir中,可以生成量化的tflite flatbuffer:1converter=tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir)
2converter.post_training_quantize=True
3tflite_quantized_model=converter.convert()
4open(“quantized_model.tflite”,“wb”).write(tflite_quantized_model)
我们提供了教程详细介绍如何执行此操作。将来,我们的目标是将这项技术整合到通用的TensorFlow工具中,以便可以在TensorFlow Lite当前不支持的平台上进行部署。教程:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/tutorials/post_training_quant.ipynb
四,效果