我遇到了一个问题,我将keras模型转换为tensorflow lite格式,但一旦转换,转换模型的模型精度就会显著下降。该模型是一个相当简单的自然语言处理模型。在转换之前,该模型的准确率约为96%,但一旦转换为tensorflow lite格式(没有任何优化(,其准确率就会降至20%左右。这是一个荒谬的表现下降,所以我想知道这是可能发生的事情,还是我在这里做错了什么?我在beaglebone SBC上运行tflite模型,运行debian,并在python上运行推断。
我的tflite转换代码:
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
我的型号代码:
model = tf.keras.Sequential([
tf.keras.layers.Embedding(vocab_size, 128, input_length=maxlen),
tf.keras.layers.GlobalAveragePooling1D(),
tf.keras.layers.Dense(24, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
我遇到了同样的问题。我通过训练后量化解决了这个问题。因此,我对我训练过的模型进行了量化,并对其进行了重新训练。这大大降低了准确性,因为keras和TFLite的差异不超过2-10%。
看起来,当keras模型转换为TFLite时,还应用了一种量化,并将浮点参数转换为整数,这导致精度下降。通过首先量化模型,我们用整数训练模型。我认为这或多或少就是发生的事情。如果错误,请纠正我
参考文献https://www.tensorflow.org/model_optimization/guide/quantization/traininghttps://www.tensorflow.org/lite/performance/model_optimization