由 Arm ML Tooling 维护
本文档概述了权重聚类,帮助您确定它如何适合您的用例。
概述
聚类或权重共享减少了模型中唯一权重值的数量,从而为部署带来了好处。它首先将每层的权重分组为 N 个聚类,然后为属于该聚类的所有权重共享该聚类的质心值。
此技术通过模型压缩带来了改进。未来的框架支持可以释放内存占用改进,这对于在资源有限的嵌入式系统上部署深度学习模型至关重要。
我们已经尝试了跨视觉和语音任务的聚类。正如下面显示的 结果 所证明的那样,我们已经看到了模型压缩高达 5 倍的改进,而准确率几乎没有损失。
请注意,对于在批归一化层之前以及与逐轴训练后量化相结合的卷积和密集层,聚类将提供较少的好处。
API 兼容性矩阵
用户可以使用以下 API 应用聚类
- 模型构建:
keras
仅适用于顺序模型和函数模型 - TensorFlow 版本:1.14+ 和 2.x 版本的 TF 1.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 模型的权重进行聚类:代码
权重聚类实现基于深度压缩:使用修剪、训练量化和霍夫曼编码压缩深度神经网络 论文。参见第 3 章,标题为训练量化和权重共享。