Path: blob/master/site/zh-cn/model_optimization/guide/clustering/clustering_example.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Keras 中的权重聚类示例
概述
欢迎阅读 TensorFlow Model Optimization Toolkit 中权重聚类的端到端示例。
其他页面
有关权重聚类的定义以及如何确定是否应使用权重聚类(包括支持的功能)的介绍,请参阅概述页面。
要快速找到您的用例(不局限于使用 16 个簇完全聚类模型)所需的 API,请参阅综合指南。
目录
在本教程中,您将:
从头开始为 MNIST 数据集训练一个
tf.keras
模型。通过应用权重聚类 API 对模型进行微调,并查看准确率。
通过聚类创建一个大小缩减至六分之一的 TF 和 TFLite 模型。
通过将权重聚类与训练后量化相结合,创建一个大小缩减至八分之一的 TFLite 模型。
查看从 TF 到 TFLite 的准确率持久性。
设置
您可以在本地 virtualenv 或 Colab 中运行此 Jupyter 笔记本。有关设置依赖项的详细信息,请参阅安装指南。
在不使用聚类的情况下为 MNIST 训练 tf.keras 模型
评估基准模型并保存以备稍后使用
通过聚类微调预训练模型
将 cluster_weights()
API 应用于整个预训练模型,以演示它不仅能够在应用 zip 后有效缩减模型大小,还能保持良好的准确率。有关如何以最佳方式平衡用例的准确率和压缩率,请参阅综合指南中的每层示例。
定义模型并应用聚类 API
在将模型传递给聚类 API 之前,请确保它已经过训练并表现出可接受的准确率。
微调模型并根据基准评估准确率
使用聚类对模型进行 1 个周期的微调。
对于本示例,与基准相比,聚类后的测试准确率损失最小。
通过聚类创建大小缩减至六分之一的模型
strip_clustering
和应用标准压缩算法(例如通过 gzip)对于看到聚类压缩的好处必不可少。
首先,为 TensorFlow 创建一个可压缩模型。在这里,strip_clustering
会移除聚类仅在训练期间才需要的所有变量(例如用于存储簇形心和索引的 tf.Variable
),否则这些变量会在推理期间增加模型大小。
随后,为 TFLite 创建可压缩模型。您可以将聚类模型转换为可在目标后端上运行的格式。TensorFlow Lite 是可用于部署到移动设备的示例。
定义一个辅助函数,通过 gzip 实际压缩模型并测量压缩后的大小。
比较后可以发现,聚类使模型大小缩减至原来的六分之一
通过将权重聚类与训练后量化相结合,创建一个大小缩减至八分之一的 TFLite 模型
您可以将训练后量化应用于聚类模型来获得更多好处。
查看从 TF 到 TFLite 的准确率持久性
定义一个辅助函数,基于测试数据集评估 TFLite 模型。
评估已被聚类和量化的模型后,您将看到从 TensorFlow 持续到 TFLite 后端的准确率。
结论
在本教程中,您了解了如何使用 TensorFlow Model Optimization Toolkit API 创建聚类模型。更具体地说,您已经从头至尾完成了一个端到端示例,此示例为 MNIST 创建了一个大小缩减至原来的八分之一且准确率差异最小的模型。我们鼓励您试用这项新功能,这对于在资源受限的环境中进行部署特别重要。