由 TensorFlow 模型最佳化維護
量化有兩種形式:訓練後量化和量化感知訓練。從 訓練後量化開始,因為它更容易使用,但量化感知訓練通常更適合模型準確度。
本頁面提供量化感知訓練的總覽,以協助您判斷其如何符合您的使用案例。
- 若要深入瞭解端對端範例,請參閱量化感知訓練範例。
- 若要快速找到符合您使用案例的 API,請參閱量化感知訓練完整指南。
總覽
量化感知訓練會模擬推論時期的量化,建立一個模型,下游工具將使用該模型來產生實際量化的模型。量化模型使用較低的精確度 (例如 8 位元而不是 32 位元浮點數),從而在部署期間帶來好處。
使用量化部署
量化透過模型壓縮和減少延遲帶來改進。使用 API 預設值,模型大小縮小 4 倍,而且我們通常在測試的後端中看到 CPU 延遲改善 1.5 到 4 倍。最終,可以在相容的機器學習加速器 (例如 EdgeTPU 和 NNAPI) 上看到延遲改善。
這項技術已在語音、視覺、文字和翻譯使用案例的生產環境中使用。程式碼目前支援這些模型的一個子集。
試用量化和相關硬體
使用者可以設定量化參數 (例如位元數) 以及在某種程度上設定底層演算法。請注意,如果從 API 預設值進行這些變更,目前沒有支援部署到後端的路徑。例如,TFLite 轉換和核心實作僅支援 8 位元量化。
針對此組態的 API 屬於實驗性質,不受回溯相容性約束。
API 相容性
使用者可以使用下列 API 套用量化
- 模型建構:
keras
,僅限循序和函式模型。 - TensorFlow 版本:適用於 tf-nightly 的 TF 2.x。
- 不支援搭配 TF 2.X 套件使用的
tf.compat.v1
。
- 不支援搭配 TF 2.X 套件使用的
- TensorFlow 執行模式:立即執行
我們計畫在以下領域新增支援
- 模型建構:釐清子類別模型如何幾乎不受支援
- 分散式訓練:
tf.distribute
一般支援矩陣
以下領域提供支援
- 模型涵蓋範圍:使用允許清單圖層的模型、在 Conv2D 和 DepthwiseConv2D 圖層之後的 BatchNormalization,以及在有限情況下使用的
Concat
。 - 硬體加速:我們的 API 預設值與 EdgeTPU、NNAPI 和 TFLite 後端等上的加速相容。請參閱藍圖中的注意事項。
- 使用量化部署:目前僅支援卷積層的每軸量化,而非每張量化。
我們計畫在以下領域新增支援
- 模型涵蓋範圍:擴充以包含 RNN/LSTM 和一般 Concat 支援。
- 硬體加速:確保 TFLite 轉換器可以產生完整整數模型。如需詳細資訊,請參閱 此問題。
- 試用量化使用案例
- 試用跨越 Keras 圖層或需要訓練步驟的量化演算法。
- 穩定 API。
結果
使用工具進行圖片分類
模型 | 非量化 Top-1 準確度 | 8 位元量化準確度 |
---|---|---|
MobilenetV1 224 | 71.03% | 71.06% |
Resnet v1 50 | 76.3% | 76.1% |
MobilenetV2 224 | 70.77% | 70.01% |
模型已在 Imagenet 上測試,並在 TensorFlow 和 TFLite 中評估。
圖片分類技術
模型 | 非量化 Top-1 準確度 | 8 位元量化準確度 |
---|---|---|
Nasnet-Mobile | 74% | 73% |
Resnet-v2 50 | 75.6% | 75% |
模型已在 Imagenet 上測試,並在 TensorFlow 和 TFLite 中評估。
範例
除了量化感知訓練範例之外,另請參閱下列範例
- CNN 模型在 MNIST 手寫數字分類任務上使用量化:程式碼
如需類似內容的背景資訊,請參閱《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》論文。本文介紹了此工具使用的一些概念。實作並不完全相同,而且此工具中還使用了其他概念 (例如每軸量化)。