当前位置: 首页 > wzjs >正文

内蒙古网站seo优化wordpress侧边浮动

内蒙古网站seo优化,wordpress侧边浮动,网站备案查询工具,车陂手机网站建设基本公式 首先,遵循如下基本公式进行量化 q为量化后的数据,例如如果量化为8bit,那么q是一个8bit的整数,S(scale)和Z(zero-point)为量化参数,为常量,r是量化前的真实值,为…

基本公式

首先,遵循如下基本公式进行量化

r=S(q-Z)

q为量化后的数据,例如如果量化为8bit,那么q是一个8bit的整数,S(scale)Z(zero-point)为量化参数,为常量,r是量化前的真实值,为实数。S为正实数,Zq数据类型相同,也是量化的,不同的矩阵和激活计算,我们使用不同的量化参数。那么,容易得到,对于给定的实数r,其量化公式为:

q=round\left ( \frac{r}{S}+Z \right )

矩阵乘法

我们来看下,如何基于上面的公式,完全通过量化整数的计算来实现矩阵乘法。考虑矩阵乘法r_3=r_1r_2,设矩阵的元素为r^{(i,j)}_{\alpha} ; {\alpha}=1,2,3; 1\leqslant i,j \leqslant N,那么量化公式变为

r_\alpha^{(i,j)}=S_\alpha(q_\alpha^{(i,j)}-Z_\alpha)

根据矩阵乘法定义我们有

S_3(q_3^{(i,k)}-Z_3)=\sum_{j=1}^{N}S_1(q_1^{(i,j)}-Z_1)S_2(q_2^{(j,k)}-Z_2)                               (1)

进一步可以得到

q_3^{(i,k)}=Z_3+M\sum_{j=1}^{N}(q_1^{(i,j)}-Z_1)(q_2^{(j,k)}-Z_2); M=\frac{S_1S_2}{S_3}                       (2)

我们可以看到唯一的非整数是M,根据经验M总是在(0,1)范围内,那么可以表示成规范化的形式:

M=2^{-n}M_0

n是非负的整数,M_0在[0.5,1)范围内,此时我们可以增加M_0的位数来将浮点乘法转换为定点乘法(int16或者int32),例如,首先扩大2^{16}倍,运算玩再缩小2^{16}倍,而缩小的运算可以直接通过移位或者截断来非常高效的实现,下面通过一个实例来说明:

#include <iostream>
#include <stdint.h>
#include <math.h>
int main() {float Mf = 0.239; // 浮点值Muint32_t Q = 123; // M要相乘的整数std::cout << "Real result is " << Mf * Q << std::endl;uint32_t shiftScale = pow(2,16); // 扩大2^16倍uint32_t M0 = shiftScale * Mf; //扩大后的M0std::cout << " M0 is " << M0 << std::endl;uint32_t result = M0 * Q;std::cout << "Quantize result is " << (result >> 16) << std::endl;std::cout << "Transform to real result is " << result / pow(2.0,16) << std::endl;return 0;
}

执行结果

Real result is 29.397M0 is 15663
Quantize result is 29 
Transform to real result is 29.3968

可以看到通过这种方式,我们可以得到小数点位之前整数位计算的正确性,而且低16位其实保存了有效的小数位结果(15~0,依次存:0.5,0.25, 0.125.....),如果我们能够高效的转换成浮点那么可以进一步提高精度,整数部分如果考虑四舍五入(否则值会统一像低位偏),量化结果可以表示为

uint32_t result = M0 * Q + pow(2,15);

零点的高效处理

公式(1)可以进一步简化为:

q_3^{(i,k)}=Z_3+M\left (NZ_1Z_2-Z_1a_2^{(k)}-Z_2a_1^{(i)}+ \sum_{j=1}^{N}q_1^{(i,j)}q_2^{(j,k)} \right )          (3)

其中,

a_2^{(k)}=\sum_{j=1}^{N}q_2^{(j,k)}, a_1^{(i)}=\sum_{j=1}^{N}q_1^{(i,j)},

可以看到,基于变换后的公式,主要计算量在\sum_{j=1}^{N}q_1^{(i,j)}q_2^{(j,k)},零点相关只需要通过两个累加来实现。

层融合

基于公式(3),我们可以进一步将偏置加激活函数层也加入到公式(3)进一步提升效率。\sum_{j=1}^{N}q_1^{(i,j)}q_2^{(j,k)}的输入是uint8输出位int32:

int32 += uint8 * uint8;

这样可以避免多次累加溢出的问题,如果想将偏置加加入到这个累加器,那么偏置向量需要取为int32类型量化数据类型,并且0为量化零点Z_{bias} = 0,最后其量化scale S_{bias}应与累加器一致,即S_{bias}=S_1S_2。这样拿到累加器的结果之后,还有3件事情要做:

缩小比例(scale down)到8-bit输出激活函数需要的scale;

截断到uint8;

执行激活函数生成8-bit输出激活。

参考文献:

Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference

http://www.dtcms.com/wzjs/800156.html

相关文章:

  • 公司网站建设开发维护工作总结室内设计在线生成
  • 广告人网站自己制作游戏的软件
  • 网站报价方案范文淘宝上做网站排名
  • 同学录网站开发的背景防城港装修公司口碑排行
  • 网站网页跳转网站建设过程中准备的工作
  • 小语种外贸网站建设正确的建议是
  • 网站建设安排wordpress添加侧边栏分享按钮
  • 拼团网站建设做特卖的网站有
  • 东莞建设网站平台ie兼容性 网站
  • 网站单页是什么意思微信小商店怎么分销
  • 开一个个人网站多少钱怎么做返利网站
  • 网站被提示危险网站网站开发 网页设计北京师范大学出版社
  • 东莞电商建站零成本游戏网站开发
  • 省级住房城乡建设主管部门网站做一个简单的管理系统
  • 子午谷网站建设国内比较厉害电商设计公司
  • 快速建立网站东莞app软件开发解决方案
  • 购物网站优化方案注册查询官方网站
  • 怎么查网站域名备案中国石化工程建设有限公司怎么样
  • 软件学校网站模板iis 无法启动此网站
  • 佛山百度网站排名优化快手网页版
  • 保定市制作网站公司wordpress注册跳过邮箱验证
  • 怎么查公司网站可信度网站服务器 数据库服务器
  • 增城住房和城乡建设局网站app网站开发哪里有
  • 怎么恢复wordpress设定值嘉兴seo外包服务商
  • 量个网站一个域名免费分销软件
  • 建设银行个人网站官网wordpress子目录伪静态
  • 推图制作网站wap网站快速开发
  • 如何用社交网站开发客户凡客v十商城
  • 福州网站开发哪家比较好石家庄市住房和城乡建设厅网站
  • 网站制作前期所需要准备html 做网站的模板