由 Arm ML Tooling 維護
本文件概述權重叢集,協助您判斷其是否符合您的使用情境。
總覽
叢集化或權重共用可減少模型中權重值的數量,進而為部署帶來好處。此技術會先將每層的權重分組為 N 個叢集,然後為屬於該叢集的所有權重共用叢集的中心值。
這項技術透過模型壓縮帶來改進。未來的架構支援可以釋放記憶體用量方面的改進,這對於在資源有限的嵌入式系統上部署深度學習模型至關重要。
我們已針對視覺和語音任務進行叢集化實驗。我們已觀察到模型壓縮最多提升 5 倍,且準確度損失極小,如下方呈現的結果所示。
請注意,叢集化對於卷積層和位於批次正規化層之前的密集層,以及與逐軸訓練後量化結合使用時,效益會降低。
API 相容性矩陣
使用者可以使用下列 API 套用叢集化
- 模型建構:
keras
,僅限 Sequential 和 Functional 模型 - 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 皆可
結果
圖片分類
模型 | 原始 | 叢集化 | ||||
---|---|---|---|---|---|---|
前 1 準確度 (%) | 壓縮後的 .tflite 檔案大小 (MB) | 設定 | 叢集數量 | 前 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 上訓練及測試。
關鍵字辨識
模型 | 原始 | 叢集化 | ||||
---|---|---|---|---|---|---|
前 1 準確度 (%) | 壓縮後的 .tflite 檔案大小 (MB) | 設定 | 叢集數量 | 前 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: Compressing Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding》論文為基礎。請參閱標題為「Trained Quantization and Weight Sharing」的第 3 章。