訓練後量化包含通用技術,可減少 CPU 和硬體加速器延遲、處理、功耗和模型大小,同時幾乎不會降低模型準確性。這些技術可以在已訓練的浮點 TensorFlow 模型上執行,並在 TensorFlow Lite 轉換期間套用。這些技術在 TensorFlow Lite 轉換器中以選項形式啟用。
若要直接開始使用端對端範例,請參閱下列教學課程
量化權重
權重可以轉換為精確度降低的類型,例如 16 位元浮點數或 8 位元整數。我們通常建議使用 16 位元浮點數進行 GPU 加速,並使用 8 位元整數進行 CPU 執行。
例如,以下是如何指定 8 位元整數權重量化
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant_model = converter.convert()
在推論時,最關鍵且密集的運算部分會以 8 位元而非浮點數計算。相較於下方同時量化權重和啟動值的情況,這會產生一些推論時間效能負擔。
如需更多資訊,請參閱 TensorFlow Lite 訓練後量化指南。
權重和啟動值的完整整數量化
確保權重和啟動值都經過量化,即可改善延遲、處理和功耗,並存取僅限整數的硬體加速器。這需要一個小型代表性資料集。
import tensorflow as tf
def representative_dataset_gen():
for _ in range(num_calibration_steps):
# Get sample input data as a numpy array in a method of your choosing.
yield [input]
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset_gen
tflite_quant_model = converter.convert()
為了方便起見,產生的模型仍會採用浮點輸入和輸出。
如需更多資訊,請參閱 TensorFlow Lite 訓練後量化指南。