1.从定点模型训练来分析量化原理:
定点模型训练是一个迁移训练的过程:在浮点网络的相应位置插入定点化处理节点(相
当于激活函数),然后在这个经过定点化的计算图上重新训练神经网络。以全连接层为例,定点模型训练函数会根据 Layer 类型的 Dense 层构建一个 TensorFlow的 dense 层(由 MatMul 和 Add 两个 OP 构成),并且在 MatMul 操作的输入、Add 操作的输出、权重张量和 MatMul 之间、偏置张量和 Add 之间增加定点化处理节点。
![](https://img-blog.csdnimg.cn/6f45f0d075a443f7826e6bb3216b511a.png)
解析:公式Q的输入为;X(数据输入,输出,权值值,偏置值),以及统计的(或者人为设置的)最大值和最小值,其目的是将权值偏置训练迭代的结果限制在特定范围内,以减小量化损失。
公式中bitwidth(是要量化的位数16位或者8位), 如果要量化8位,那么根据以上描述
∇=2frac =xmax*128-1-1
,当xmax
确定即可求出frac
,然后Q公式即可正常计算,Q=∇*floor
中floor
就是量化的结果,再次乘以∇
就是恢复到了浮点值来完成正常的浮点训练(即定点训练只是将网络的进行了定点的限制),当量化网络的整形结果输出时也可通过乘以当前层的∇
来得到正常的浮点值。
2.以libfacedetection实例分析
本实例并未进行定点训练,直接将浮点训练结果进行了定点化,但推理部分与上面原理和操作是一致的。
(1)将浮点权值转化为整形值,保存scale值,相当于∇![](https://img-blog.csdnimg.cn/cc3e8111965048ed82c66c3ec1fc1999.png)
![](https://img-blog.csdnimg.cn/9405666ef59f46acb8400f0274ac6ace.png)
保存权值和scale值
![](https://img-blog.csdnimg.cn/e035c0379ed54cfe8faff2e1fd67169d.png)
(2)根据定点原理重写推理算法,首先重写整形矩阵运算,然后利用指令集加速
![](https://img-blog.csdnimg.cn/63f827aef2d6422a8cff40724ad80b97.png)
关于scale的传递,卷积为输入和权值的相乘,池化的输出等于输入
![](https://img-blog.csdnimg.cn/d7f0e8efb44f42bea4a22441ffecbd5c.png)
两外relu激活函数的scale需要重新求得,同样向下传递:
![](https://img-blog.csdnimg.cn/2f13e459ce7f4e8a8747a4116c5ef822.png)
(3)定点转浮点的算子,将最终结果转成浮点
-
![](https://img-blog.csdnimg.cn/ea1e5ba08fea4c9489e0fcf219aa7cf8.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)