由 Arm ML Tooling 維護
本文概述權重分群,協助您判斷這項技術是否適合您的用途。
總覽
分群 (或權重共用) 可減少模型中獨特權重值的數量,進而為部署帶來好處。此技術會先將每一層的權重分組為 N 個叢集,然後針對屬於該叢集的所有權重共用叢集的中心值。
這項技術透過模型壓縮帶來效能提升。日後架構支援可望帶來記憶體用量方面的改善,這對於在資源有限的嵌入式系統上部署深度學習模型至關重要。
我們已針對視覺和語音工作試驗過分群技術。結果如下方結果所示,我們發現模型壓縮最多可提升 5 倍,且精確度僅略微降低。
請注意,分群技術對於卷積層和批次正規化層之前的密集層,以及搭配逐軸訓練後量化使用時,效益會降低。
API 相容性矩陣
使用者可以使用下列 API 套用分群技術
- 模型建構:僅限 Sequential 和 Functional 模型的
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: Compressing Deep Neural Networks With Pruning, Trained Quantization and Huffman Coding 論文為基礎。請參閱第 3 章,標題為「Trained Quantization and Weight Sharing」。