由 Arm 机器学习工具团队维护
本文概要介绍了权重聚类,帮助您确定它是否适合您的用例。
概览
聚类(或权重共享)可减少模型中唯一权重值的数量,从而带来部署优势。聚类首先将每层的权重分组成 N 个聚类,然后共享属于相应聚类的所有权重的聚类形心值。
此技术通过模型压缩改进了模型。未来的框架支持能够改善内存占用,这对在资源有限的嵌入式系统上部署深度学习模型具有重大意义。
我们尝试了视觉和语音任务方面的聚类。我们发现模型压缩的性能提升了 5 倍,并且对准确率造成的影响极低,如下文列出的结果所示。
请注意,如果批次归一化层前面有卷积层和密集层,以及将聚类与按每个轴的训练后量化相结合使用,聚类提供的优势较少。
API 兼容性矩阵
用户可以使用以下 API 来应用聚类:
- 模型构建:只能对序列模型和函数式模型使用
tf.keras
- TensorFlow 版本:TF 1.x(包括版本 1.14 及更高版本)和 TF 2.x。
- 不支持对 TF 2.X 软件包使用
tf.compat.v1
及对 TF 1.X 软件包使用tf.compat.v2
。
- 不支持对 TF 2.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)。