如何解决为什么 TFLite 整数 8 量化产生的准确度比 CoreML 整数 8 差?
我正在移动设备上实施 Keras GRU 模型 (tensorflow.keras.layers.GRU
) 以进行字符级语言建模。
为了有一个更小的设备上检查点,我正在试验 TFLite 和 CoreML 8 位整数量化。问题在于,与 CoreML 压缩模型相比,TFLite 压缩模型在测试集上产生的准确度结果最多降低 3%。测试集足够大,CoreML 模型结果非常接近完整的 32 位模型(或 16 位模型)。
这是我执行 TFLite 转换的方式(其中模型的类型为 tf.keras.Model
):
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.experimental_new_converter = True
converter.experimental_new_quantizer = True
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converted = converter.convert()
我尝试过各种版本的 TensorFlow,包括 2.4.1、2.5.0 和 nightly。
这就是我执行 CoreML 转换的方式(其中模型的类型为 tf.keras.Model
):
import coremltools as ct
coreml_model = ct.convert(model,use_float_arraytype=True)
coreml_model = ct.models.neural_network.quantization_utils.quantize_weights(coreml_model,8,quantization_mode="linear")
TensorFlow Lite 不允许您指定量化模式,而 CoreML 允许您选择:linear
(默认)、linear_lut
、kmeans_lut
、custom_lut
、 linear_symmetric
。我尝试了所有这些,但custom_lut
。除了 linear_lut
之外,我尝试过的所有结果都与非量化模型非常相似。
现在的问题是:为什么来自 TFLite 量化过程的模型比来自 CoreML 的几乎所有方法差这么多?有没有人遇到过这种情况或有提高 TFLite 量化性能的解决方法?
非常感谢您的帮助!
一些文档链接:
- TensorFlow 模型的 CoreML 转换:https://coremltools.readme.io/docs/tensorflow-2
- TFLite 量化通用页面:https://www.tensorflow.org/lite/performance/post_training_quantization
- TFLite 量化规范:https://www.tensorflow.org/lite/performance/quantization_spec
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。