1. 磐创AI-开放猫官方网站首页
  2. 机器学习
  3. TensorFlowNews

模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo

点击上方“磐创AI”,选择“置顶公众号”

精品文章,第一时间送达

模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo

转载自:量子位,未经允许不得二次转载

近日,TensorFlow模型优化工具包又添一员大将,训练后的半精度浮点量化(float16 quantization)工具。

模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo

有了它,就能在几乎不损失模型精度的情况下,将模型压缩至一半大小,还能改善CPU和硬件加速器延迟。

这一套工具囊括混合量化,全整数量化和修剪。

模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo

如何量化模型,尽可任君挑选。

压缩大小,不减精度

双精度是64位,单精度是32位,所谓的半精度浮点数就是使用2个字节(16位)来存储。

比起8位或16位整数,半精度浮点数具有动态范围高的优点;而与单精度浮点数相比,它能节省一半的储存空间和带宽。

模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo

比起双精度和单精度浮点数,半精度浮点显然没有那么适合计算。那么问题来了,为什么要主动降低精度呢?

因为实际上,很多应用场景对于精度的要求并没有那么高。在分布式深度学习中,模型可能会有成千上万个参数,体积一个赛一个的大,如果能把所有常量值都用16位浮点数而不是32位浮点数来存储,那么模型大小就能压缩至一半,还是相当可观的。

体积压缩了,精确度难道不会损失吗?

降低浮点数精度,当然会带来精确度的损失,但是不必担心,这样的损失小到可以忽略不计。

在ILSVRC 2012图像分类任务上分别测试标准的MobileNet float32模型和float16模型变体,可以看到,无论是MobileNet v1还是MobileNet v2,无论是top1还是top5,fp16模型的精度损失都小于0.03%

模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo

再试试对象检测任务,fp16变体比之标准模型,几乎没有精度损失。

模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo

而无论是MobileNet v1还是MobileNet SSD,fp16变体的体积都比标准模型的大小降低了约一半。

模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo

小体积,高精度,有什么理由不试试半精度浮点量化工具呢?

便捷使用

想要把你训练过的32位模型转成16位,操作并不复杂。只需设置两行关键代码。

在TensorFlow Lite converter上把32位模型的优化设置设为DEFAULT,然后把目标规范支持类型设置为FLOAT16:

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_types = [tf.lite.constants.FLOAT16]
Tflite_quanit_model = converter.convert()

模型转换成功之后就可以直接运行了。

默认情况下,模型是这样在CPU上运行的:把16位参数“上采样”为32位,并在标准32位浮点运算中执行操作。

这样做的原因是目前很多硬件还不支持加速fp16计算。在未来,有更多硬件支持的情况下,这些半精度值就不再需要“上采样”,而是可以直接进行计算。

在GPU上运行fp16模型更简单。

TensorFlow Lite的GPU代理已经得到加强,能够直接获取并运行16位精度参数:

//Prepare GPU delegate.
const TfLiteGpuDelegateOptions options = {
  .metadata = NULL,
  .compile_options = {
    .precision_loss_allowed = 1,  // FP16
    .preferred_gl_object_type = TFLITE_GL_OBJECT_TYPE_FASTEST,
    .dynamic_batch_enabled = 0,   // Not fully functional yet
  },
};

如果你感兴趣,TensorFlow官方还给出了教程demo,打开文末Colab链接,你就可以在线训练一个16位的MNIST模型啦。

传送门

官方指南:
https://www.tensorflow.org/lite/performance/post_training_quantization

Colab链接:
https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/performance/post_training_float16_quant.ipynb

你也许还想

● 知识图谱与机器学习|KG入门 — Part2 建立知识图谱

● 使用特定领域的文档构建知识图谱 | 教程

● 图像配准:从SIFT到深度学习


欢迎扫码关注:

模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo


模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo 点击下方 |  | 了解更多

磐创AI:http://www.panchuangai.com/ 智能客服:http://www.panchuangai.com/ TensorFlow:http://panchuang.net 推荐关注公众号:磐创AI

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2019/08/10/df024e0481/

发表评论

登录后才能评论

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息