由 Arm ML Tooling 維護
本文件概述了權重叢集,以協助您判斷它如何適用於您的使用案例。
總覽
叢集化或權重共享減少模型中獨特權重值的數量,從而為部署帶來好處。它首先將每層的權重分組為 N 個叢集,然後為屬於該叢集的所有權重共享叢集的質心值。
此技術透過模型壓縮帶來改進。未來的框架支援可以解鎖記憶體佔用空間的改進,這對於在資源有限的嵌入式系統上部署深度學習模型可能至關重要。
我們已在視覺和語音任務中試驗過叢集化。我們已看到模型壓縮最多可改進 5 倍,且準確性損失極小,如下面呈現的結果所示。
請注意,對於先於批次正規化層的卷積層和密集層,以及與每軸訓練後量化結合使用時,叢集化帶來的好處將會減少。
API 相容性矩陣
使用者可以使用以下 API 應用叢集化
- 模型建構:僅限循序和函數式模型的
keras
- TensorFlow 版本:適用於 1.14 以上版本和 2.x 版本的 TF 1.x。
- 使用 TF 2.X 套件的
tf.compat.v1
和使用 TF 1.X 套件的tf.compat.v2
不受支援。
- 使用 TF 2.X 套件的
- TensorFlow 執行模式:圖形和 Eager 模式
結果
影像分類
模型 | 原始 | 叢集化 | ||||
---|---|---|---|---|---|---|
Top-1 準確度 (%) | 壓縮後的 .tflite 檔案大小 (MB) | 組態 | 叢集數量 | Top-1 準確度 (%) | 壓縮後的 .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 上進行了訓練和測試。
關鍵字辨識
模型 | 原始 | 叢集化 | ||||
---|---|---|---|---|---|---|
Top-1 準確度 (%) | 壓縮後的 .tflite 檔案大小 (MB) | 組態 | 叢集數量 | Top-1 準確度 (%) | 壓縮後的 .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:使用剪枝、訓練後量化和霍夫曼編碼壓縮深度神經網路》論文。請參閱第 3 章,標題為「訓練後量化和權重共享」。