由 Arm ML Tooling 維護
本文件將概略說明權重分群法,協助您判斷是否適用於您的用途。
總覽
分群法 (或權重共用) 可降低模型中唯一權重值的數量,因此可協助你部署模型。此方法會先將每一層的權重分為 N 個叢集,然後提供叢集的群集中心值給屬於叢集的所有權重。
這項技術透過壓縮模型改善了成效。未來的架構支援可能會降低記憶體使用量,對於在資源受限內嵌系統上的深度學習模型部署作業而言,這項改善將可帶來重大改變。
我們已在各種視覺工作和語音工作中,使用分群法進行實驗。我們發現,在盡量不犧牲準確率的前提下,模型壓縮率最多可提升 5 倍。如下方結果所示。
請注意,分群法可以減少批次正規化層之前的卷積和稠密層分層,也可以搭配以軸為根據的訓練後量化。
API 相容性矩陣
使用者可透過下列 API 套用分群法:
- 模型建構:
tf.keras
僅包含序列模型和函式模型 - TensorFlow 版本:TF 1.x 適用於 1.14 以上版本和 2.x 版本。
- 不支援使用 TF 2.X 套件的
tf.compat.v1
和使用 TF 1.X 套件的tf.compat.v2
。
- 不支援使用 TF 2.X 套件的
- TensorFlow 執行模式:包括 Graph 和 Eager 模式
結果
圖片分類
模型 | 原始 | 已分群 | ||||
---|---|---|---|---|---|---|
最高準確率 (%) | 壓縮的 .tflite 大小 (以 MB 為單位) | 設定 | 叢集編號 | 最高準確率 (%) | 壓縮的 .tflite 大小 (以 MB 為單位) | |
MobileNetV1 | 70.976 | 14.97 | ||||
選擇性 (最後 3 個 Conv2D 層) | 16, 16, 16 | 70.294 | 7.69 | |||
選擇性 (最後 3 個 Conv2D 層) | 32, 32, 32 | 70.69 | 8.22 | |||
完整 (所有 Conv2D 層) | 32 | 69.4 | 4.43 | |||
MobileNetV2 | 71.778 | 12.38 | ||||
選擇性 (最後 3 個 Conv2D 層) | 16, 16, 16 | 70.742 | 6.68 | |||
選擇性 (最後 3 個 Conv2D 層) | 32, 32, 32 | 70.926 | 7.03 | |||
完整 (所有 Conv2D 層) | 32 | 69.744 | 4.05 |
模型是在 ImageNet 上進行訓練及測試。
關鍵字發掘
模型 | 原始 | 已分群 | ||||
---|---|---|---|---|---|---|
最高準確率 (%) | 壓縮的 .tflite 大小 (以 MB 為單位) | 設定 | 叢集編號 | 最高準確率 (%) | 壓縮的 .tflite 大小 (以 MB 為單位) | |
DS-CNN-L | 95.233 | 1.46 | ||||
完整 (所有 Conv2D 層) | 32 | 95.09 | 0.39 | |||
完整 (所有 Conv2D 層) | 8 | 94.272 | 0.27 |
模型是在 SpeechCommands v0.02 上進行訓練及測試。
- 將 Keras 模型序列化為 .h5 檔案
- 使用
TFLiteConverter.from_keras_model_file()
將 .h5 檔案轉換成 .tflite - 將 .tflite 檔案壓縮成 zip 檔
範例
除了採用 Keras 的權重分群法範例之外,請一併參閱以下範例:
- 針對以 MNIST 手寫數字分類資料集訓練而成的 CNN 模型進行權重分群:程式碼
權重分群法的實作是以〈Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding〉(深度壓縮:透過修剪、訓練量化及霍曼夫編碼壓縮類神經網路) 論文為依據。請參閱第 3 章「Trained Quantization and Weight Sharing」(訓練量化和權重共用)。