Path: blob/master/site/zh-cn/model_optimization/guide/combine/pqat_example.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
剪枝保留量化感知训练 (PQAT) Keras 示例
文本特征向量
这是一个展示剪枝保留量化感知训练 (PQAT) API 用法的端到端示例,该 API 是 TensorFlow 模型优化工具包的协作优化流水线的一部分。
其他页面
有关流水线和其他可用技术的简介,请参阅协作优化概述页面。
目录
在本教程中,您将:
从头开始为 MNIST 数据集训练一个
tf.keras
模型。使用稀疏性 API,通过剪枝对模型进行微调,并查看准确率。
应用 QAT 并观察稀疏性损失。
应用 PQAT 并观察之前应用的稀疏性已被保留。
生成一个 TFLite 模型并观察对其应用 PQAT 的效果。
将获得的 PQAT 模型准确率与使用训练后量化所量化的模型进行比较。
安装
您可以在本地 virtualenv 或 Colab 中运行此 Jupyter 笔记本。有关设置依赖项的详细信息,请参阅安装指南。
为 MNIST 训练不进行剪枝的 tf.keras 模型
评估基准模型并保存以备稍后使用
将模型剪枝和微调至 50% 稀疏性
应用 prune_low_magnitude()
API 对整个预训练模型进行剪枝,以演示并观察其不仅能够在应用 zip 时有效缩减模型大小,还能保持良好的准确率。有关如何在保持目标准确率的同时以最佳方式使用 API 实现最佳压缩率,请参阅剪枝综合指南。
定义模型并应用稀疏性 API
在使用稀疏性 API 之前,需要对模型进行预训练。
微调模型并根据基准评估准确率
在 3 个周期内使用剪枝对模型进行微调。
定义辅助函数来计算和打印模型的稀疏性。
检查模型是否已被正确剪枝。我们需要先剥离剪枝包装器。
对于本示例,与基准相比,剪枝后的测试准确率损失微乎其微。
应用 QAT 和 PQAT 并检查两种情况下对模型稀疏性的影响
接下来,我们对剪枝后的模型同时应用 QAT 和剪枝保留 QAT (PQAT),并观察 PQAT 在剪枝后的模型中保留稀疏性。请注意,在应用 PQAT API 之前,我们使用 tfmot.sparsity.keras.strip_pruning
从模型中剥离了剪枝包装器。
查看 PQAT 模型的压缩优势
定义辅助函数以获取压缩的模型文件。
由于这是一个小型模型,因此两个模型之间的差异不是非常明显。将剪枝和 PQAT 应用于更大的生产模型将产生更显著的压缩效果。
查看从 TF 到 TFLite 的准确率持久性
定义一个辅助函数,基于测试数据集评估 TFLite 模型。
评估已被剪枝和量化的模型后,您将看到 TFLite 后端保持 TensorFlow 的准确率。
应用训练后量化并与 PQAT 模型进行比较
接下来,我们对剪枝后的模型使用一般训练后量化(无微调),并根据 PQAT 模型检查其准确率。这演示了为什么需要使用 PQAT 来提高量化模型的准确率。
首先,根据前 1000 个训练图像定义一个校准数据集生成器。
对模型进行量化并将准确率与先前获得的 PQAT 模型进行比较。请注意,通过微调量化的模型会实现更高的准确率。
结论
在本教程中,您学习了如何创建模型,使用稀疏性 API 对其进行剪枝,以及应用稀疏性保留量化感知训练 (PQAT) 以在使用 QAT 时保留稀疏性。将最终的 PQAT 模型与 QAT 模型进行了比较,以表明前者保留了稀疏性,而后者丢失了稀疏性。接下来,将模型转换为 TFLite 以显示链式剪枝和 PQAT 模型优化技术的压缩优势,并评估 TFLite 模型以确保在 TFLite 后端保持准确率。最后,将 PQAT 模型与使用训练后量化 API 实现的量化剪枝模型进行比较,以展示 PQAT 在恢复正常量化的准确率损失方面的优势。