由 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 | 71.02 | 14.96 | ||||
選擇性 (最後 3 個 Conv2D 層) | 256、256、32 | 70.62 | 8.42 | |||
完整 (所有 Conv2D 層) | 64 | 66.07 | 2.98 | |||
MobileNetV2 | 72.29 | 12.90 | ||||
選擇性 (最後 3 個 Conv2D 層) | 256、256、32 | 72.31 | 7.00 | |||
完整 (所有 Conv2D 層) | 32 | 69.33 | 2.60 |
模型是在 ImageNet 上進行訓練及測試。
關鍵字發掘
模型 | 原始 | 已分群 | ||||
---|---|---|---|---|---|---|
最高準確率 (%) | 壓縮的 .tflite 大小 (以 MB 為單位) | 設定 | 叢集編號 | 最高準確率 (%) | 壓縮的 .tflite 大小 (以 MB 為單位) | |
DS-CNN-L | 95.03 | 1.5 | 完整 | 32 | 94.71 | 0.3 |
模型是在 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 (訓練量化和權重共用)」。