[原]Tensorflow中采用的量化方案

标签: | 发表时间:2019-01-07 09:34 | 作者:qqqzmy
出处:https://blog.csdn.net/qqqzmy

Tensorflow中采用的量化方案

摘要

本文根据google发表在cvpr2018上的量化文章《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》讲解量化过程,该过程同时也是谷歌的Tensorflow Lite中使用的量化方法。

1. 量化方案

经典的Uniform Affine Quantizer中存在计算量无法下降的问题,Tensorflow在其量化工具中进行了改进,实现了把浮点数计算变为整数计算,精度损失在1%-2%。量化过程如下:
设整数q与浮点数r的转换关系为:
在这里插入图片描述
假设卷积过程中的浮点数相乘过程如下:
在这里插入图片描述
r3为输出,r1、r2分别为输入的权重和数据,这三个数都是浮点数型。
在矩阵NxN中,对于一个浮点数,有
在这里插入图片描述
其中 在这里插入图片描述 把(2)带入(1)中得到,
在这里插入图片描述
从(4)中可以看出浮点数计算已经被转化为整数的计算,其中只有M是浮点数,并且M是可以预先计算出来的
M还可以再进一步进行简化运算,作者发现M值总是在(0,1)的区间之内,于是可以设
在这里插入图片描述
其中n为一个非负整数,M0处于区间[0.5,1)之间,M0可以采用int32来表示,即该值所有的值都是小数部分。所以公式(4)中乘以M的操作,可以等价为先乘一个定点的int32整数M0,再做n次位移操作。
观察发现,上面的公式(4)中每个数都需要先减对应的零点再做相乘操作,这样会进行较多的加减操作,在公式(4)的基础上可以进一步的推理变换如下形式:
在这里插入图片描述
此时,公式(7)中的计算就集中在
在这里插入图片描述
公式(7)中的值就采用int32来存储。
接下来将该卷积的bias进行int32的量化,定义量化步长和零点为:
在这里插入图片描述
所以,
在这里插入图片描述
将rbias带入到卷积求和公式中,可以得到
在这里插入图片描述
进行变换得到
在这里插入图片描述
最终输出该卷积层的量化输出值q_3^((i,k))

2. 实验

测试的例子以TF官网上已经预训练好的GoogLeNet 为例,对其量化为8bit精度模型,然后对量化前后的模型进行测试
模型原大小:91.24MB
量化后模型大小:23.18MB
原模型(浮点数)预测结果:
在这里插入图片描述
8bit量化后模型预测结果:
在这里插入图片描述
量化前耗时:0.27532124519348145s
量化后耗时:0.7184736728668213s
这是目前比较疑惑的地方,量化后使用的时间比量化前还多,具体原因还没弄清楚。量化后的pb文件还可以进一步转化为tflite文件,不过googLeNet中有不支持转化的算子,转化不成功。
在网上参考其他人的博客,有人把mobilenet量化后的.pb文件进一步转化为tflite文件,在3536上运行,速度有2-3倍的提升

3. 参考

  1. 《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》
    https://arxiv.org/abs/1712.05877
  2. google量化白皮书
    https://arxiv.org/pdf/1806.08342v1.pdfhttps://arxiv.org/pdf/1806.08342v1.pdf
  3. https://blog.csdn.net/mizhenpeng/article/details/81488244
  4. https://zhuanlan.zhihu.com/p/35700882
作者:qqqzmy 发表于 2019/01/07 09:34:44 原文链接 https://blog.csdn.net/qqqzmy/article/details/85984800
阅读:6

相关 [tensorflow 量化] 推荐:

[原]Tensorflow中采用的量化方案

- - Mingyong_Zhuang的技术博客
Tensorflow中采用的量化方案. 本文根据google发表在cvpr2018上的量化文章《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》讲解量化过程,该过程同时也是谷歌的Tensorflow Lite中使用的量化方法.

TensorFlow-dev-summit:那些 TensorFlow 上好玩的和黑科技

- - IT瘾-dev
本文属于介绍性文章,其中会介绍许多TensorFlow的新feature和summit上介绍的一些有意思的案例,文章比较长,可能会花费30分钟到一个小时. Google于2017年2月16日(北京时间)凌晨2点在美国加利福尼亚州山景城举办了首届TensorFlow开发者峰会. Google现场宣布全球领先的深度学习开源框架TensorFlow正式对外发布V1.0版本,并保证Google的本次发布版本的API接口满足生产环境稳定性要求.

TensorFlow、MXNet、PaddlePaddle 三个开源库对比

- - IT瘾-dev
【转载请注明出处】 chenrudan.github.io. 从深度学习开始流行,到深度学习框架的迭代,到各类实际应用的出现,不过短短几年时间. 其实发展到现在,各个框架对自己的定位都不相同,硬要说哪个框架最好没什么必要,结合自身需求找到合适的用就够了(实验室的服务器不太方便拿来折腾,本文就不比较运算速度了,可以参考[4][5]).

深度学习利器:TensorFlow实战

- - 孟飞阳的博客
深度学习及TensorFlow简介. 深度学习目前已经被应用到图像识别,语音识别,自然语言处理,机器翻译等场景并取得了很好的行业应用效果. 至今已有数种深度学习框架,如TensorFlow、Caffe、Theano、Torch、MXNet,这些框架都能够支持深度神经网络、卷积神经网络、深度信念网络和递归神经网络等模型.

如何将TensorFlow用作计算框架

- - 神刀安全网
摘要:如果你刚刚接触TensorFlow并想使用其来作为计算框架,那么本文是你的一个很好的选择,阅读它相信会对你有所帮助. Tensorflow可能是最受欢迎,增长最快的机器学习框架. 在 Github拥有超过70000个点赞,并得到Google的支持,不仅拥有比 Linux更多的点赞,还拥有大量的资源.

TensorFlow自动识别验证码(二)

- -
在 使用tensorflow自动识别验证码(一) 这篇文章中,对使用tensorflow自动识别验证码的过程做了简单的了解和编写. 那么今天这篇文章将对上篇文章中代码进行修改用于实现对主流的CMS进行验证码的破解. 先回顾一下 tensorflow 的自动识别验证码的步骤. 由于后面三步基本都是tensorflow自动完成.

[转]Tensorflow实现的CNN文本分类

- - Soul Joy Hub
在这篇文章中,我们将实现一个类似于Kim Yoon的卷积神经网络语句分类的模型. 本文提出的模型在一系列文本分类任务(如情感分析)中实现了良好的分类性能,并已成为新的文本分类架构的标准基准. 本文假设你已经熟悉了应用于NLP的卷积神经网络的基础知识. 如果没有,建议先阅读Understanding Convolutional Neural Networks for NLP 以获得必要的背景.

Google 人工智能系统 TensorFlow 开源背后

- - TECH2IPO
Google 周一发布人工智能系统 TensorFlow 并宣布开源,TensorFlow 是 Google 耗费心血开发出了第二代人工智能系统,Google 此举并不像表面看来那么简单. 尽管 Google 宣布 TensorFlow 开源,人人皆可使用,但是 Google 掌握着使其成功的大部分因素:大数据、运行软件的高性能的计算机网络和强大的人工智能专家团队.

TensorFlow实战之K-Means聚类算法实践

- - SegmentFault 最新的文章
Google 最近开源了它的第二代人工智能与数值计算库TensorFlow. TensorFlow由Google大脑团队开发,并且能够灵活地运行在多个平台上——包括GPU平台与移动设备中. TensorFlow的核心就是使用所谓的数据流,可以参考Wikipedia上的有关于 Genetic Programming 的相关知识,譬如:.

动态神经网络工具包DyNet:比Theano和TensorFlow更快

- - IT瘾-tuicool
近日,来自卡内基梅隆大学、日本奈良先端科学技术大学、Google DeepMind、以色列巴伊兰大学、艾伦人工智能研究所、IBM T.J. Watson 研究中心、澳大利亚墨尔本大学、约翰·霍普金斯大学、谷歌、华盛顿大学、微软和英国爱丁堡大学的研究者共同发表了一篇重磅论文《DyNet: The Dynamic Neural Network Toolkit》,正式介绍了动态神经网络工具包 DyNet;该工具包也已在 GitHub 上开源:http://github.com/clab/dynet.