0

我正在tensorflow.keras.layers.GRU移动设备上实现 Keras GRU 模型 ( ) 用于字符级语言建模。为了有一个更小的设备检查点,我正在试验 8 位的 TFLite 和 CoreML 整数量化。问题在于,与 CoreML 压缩模型相比,TFLite 压缩模型在测试集上产生的准确率降低了 3%。测试集足够大,CoreML 模型结果非常接近完整的 32 位模型(或 16 位模型)。

这就是我为 TFLite 执行转换的方式(其中 model 是 type 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 执行转换的方式(其中 model 是 type 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_lutkmeans_lutcustom_lutlinear_symmetriccustom_lutlinear_lut

现在的问题是:为什么来自 TFLite 量化过程的模型比来自 CoreML 的几乎所有方法都要糟糕得多?有没有人经历过这种情况或有解决方法来提高 TFLite 量化的性能?

非常感谢你的帮助!

一些文档链接:

4

0 回答 0