由 Arm ML 工具维护
本文档概述了权重聚类,以帮助您确定它如何适合您的用例。
概述
聚类或权重共享减少了模型中唯一权重值的数量,从而带来了部署优势。它首先将每一层的权重分组到 *N* 个聚类中,然后为属于该聚类的所有权重共享该聚类的中心值。
此技术通过模型压缩带来了改进。未来的框架支持可以解锁内存占用改进,这对于在资源有限的嵌入式系统上部署深度学习模型至关重要。
我们已经在视觉和语音任务中尝试了聚类。我们已经看到了模型压缩的 5 倍改进,而精度损失最小,如下面的 结果 所示。
请注意,聚类将为在批归一化层之前的卷积层和密集层以及与每个轴训练后量化结合使用时提供减少的优势。
API 兼容性矩阵
用户可以使用以下 API 应用聚类
- 模型构建:
keras
,仅支持 Sequential 和 Functional 模型 - TensorFlow 版本:TF 1.x(版本 1.14+)和 2.x。
tf.compat.v1
(使用 TF 2.X 包)和tf.compat.v2
(使用 TF 1.X 包)不支持。
- TensorFlow 执行模式:图模式和急切模式
结果
图像分类
模型 | 原始 | 聚类 | ||||
---|---|---|---|---|---|---|
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*。