tensorflow 小于_TensorFlow 模型优化工具 — float16 量化将模型体积减半

通过训练后半精度浮点量化,TensorFlow Lite 模型可以在几乎不损失准确度的情况下减小尺寸约 50%。此技术适用于边缘设备,对 MobileNet V1, V2 及 SSD 模型的测试显示准确度影响微乎其微。" 106911969,7659749,商业数据分析:多元回归优化广告投放策略,"['数据分析', '广告策略', '营销优化', '商业决策']
摘要由CSDN通过智能技术生成
a6048132664c5aaa894dd82e14c2eee6.png

我们很高兴在模型优化工具包中添加训练后的半精度浮点量化 (float16 quantization),此工具套件包含混合量化 (hybrid quantization)、训练后整形量化 (full integer quantization) 和剪枝 (pruning)。点此查看发展蓝图中的其他工具。

训练后的半精度浮点量化可以在损失极少准确度的情况下,缩小 TensorFlow Lite 模型的大小(最高可缩减 50%)。它将模型常量(如权重和偏差值)从全精度浮点(32 位)量化为精度下降的浮点数据类型 (IEEE FP16)。

注:量化 链接

https://tensorflow.google.cn/model_optimization/guide#quantization

训练后的半精度浮点量化不但对准确度的影响很小,而且能显著缩小模型尺寸,因而是初始量化 TensorFlow Lite 模型的好工具。您可在此处查看我们的文档(包含新的浮点图表),了解不同的量化选项和方案。

注:文档 链接

https://tensorflow.google.cn/lite/performance/post_training_quantization

e3b9fe405c8f3938054126cb4c6ea616.gif

降低精度的益处

精度降低存在诸多益处,尤其是部署在边缘设备时:

  • 模型尺寸缩减一半。模型中的所有常量值均存储在 16 位浮点而非 32 位浮点中。这些常量值通常决定模型的总体尺寸,因此可以将模型尺寸缩减约一半。
  • 精度损失微乎其微。与初始训练精度相比,深度学习模型使用较低精度时通常可以产生良好的推理结果。我们对多个模型进行实验,发现推理质量的损失甚微。在下面的例子中可以看到,MobileNet V2 的 Top 1 准确度下降小于 0.03%(参见下文结果)。

模型大小缩减一半,准确度损失微乎其微

训练后的半精度浮点量化对准确度影响甚小,却可将深度学习模型的尺寸缩减约一半。例如,以下是 MobileNet V1 和 V2 模型以及 MobileNet SSD 模型的一些结果。MobileNet V1 和 V2 的准确度结果基于 ImageNet 图像识别任务,对 SSD 模型的评估则基于 COCO 对象识别任务。

注: ImageNet 链接

http://image-net.org/

 COCO 链接

http://cocodataset.org/

c04947edd10d4635f054e370dc9e9cbe.png

模型准确度

对标准 Mobilenet float32 模型(与 fp16 变体)的评估基于 LSVRC 2012 图像分类任务,对 Mobilenet SSD float32 及其 fp16 变体的评估则基于 COCO 对象检测任务。

注:LSVRC 2012 图像分类任务 链接

http://www.image-net.org/challenges/LSVRC/2012/

COCO 对象检测任务 链接

http://cocodataset.org/#detection-eval

c31a491b7808ad51e9f0137631b334d3.png

如何启用训练后的半精度浮点量化

您可以采用训练好的 float32 模型,将优化设置为“默认”,并将目标规范的支持类型设置为 float16 常量,从而在 TensorFlow Lite 转换器上指定训练后的半精度浮点量化:
1import tensorflow as tf
2converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
3converter.optimizations = [tf.lite.Optimize.DEFAULT]
4converter.target_spec.supported_types = [tf.lite.constants.FLOAT16]
5Tflite_quanit_model = converter.convert()
模型转换完成后可直接运行,这与其他 TensorFlow Lite 模型并无二致。默认情况下,模型会将 16 位参数“上采样”为 32 位,接着在标准 32 位浮点运算中执行操作,最终在 CPU 上运行。随着时间推移,我们有望看到有更多的硬件支持加速 fp16 计算, 允许我们跳过上采样的步骤,直接使用 float16 精度进行计算 。您也可以在 GPU 上运行模型。我们已强化 TensorFlow Lite GPU 委派,以接收精度降低的参数,并直接使用这些参数运行(而非如 CPU 中一般将其转化为 float32)。在您的应用中,您可以通过 TfLiteGpuDelegateCreate 函数创建 GPU 委派( 文档)。指定委派选项时,请确保将 precision_loss_allowed 设置为 1,以便在 GPU 中使用16位浮点进行运算:
1//Prepare GPU delegate.
2const TfLiteGpuDelegateOptions options = {
3  .metadata = NULL,
4  .compile_options = {
5    .precision_loss_allowed = 1,  // FP16
6    .preferred_gl_object_type = TFLITE_GL_OBJECT_TYPE_FASTEST,
7    .dynamic_batch_enabled = 0,   // Not fully functional yet
8  },
9};
如需 GPU 委派概览,请参阅先前的 博文。请在此 Colab 教程中查看使用半精度浮点量化的工作示例。

注:GPU 委派 链接

https://tensorflow.google.cn/lite/performance/gpu_advanced

委派概览 链接

https://medium.com/tensorflow/tensorflow-lite-now-faster-with-mobile-gpus-developer-preview-e15797e6dee7

Colab 链接

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/performance/post_training_float16_quant.ipynb

建议您立即试用此工具并提供反馈。直接分享您的用例或在 Twitter 上使用 #TFLite 和 #PoweredByTF 标签分享。

注:提交用例 链接

https://services.google.cn/fb/forms/TFCS/

致谢

T.J. Alumbaugh、Andrei Kulik、Juhyun Lee、Jared Duke、Raziel Alvarez、Sachin Joglekar、Jian Li、Yunlu Li、Suharsh Sivakumar、Nupur Garg、Lawrence Chan、Andrew Selle。

更多 TensorFlow Lite 相关阅读:

  • TensorFlow 模型优化工具包  —  训练后整型量化

  • TensorFlow 模型优化工具包  —  剪枝 API

  • TensorFlow Lite 2019 年发展蓝图

  • TensorFlow 模型优化工具包正式推出

02ee913a8a20a5f321cde8ebfad11f32.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值