一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据类型转换方法、装置、电子设备以及存储介质与流程

2022-07-17 00:31:38 来源:中国专利 TAG:


1.本技术涉及神经网络量化领域,特别是涉及一种数据类型转换方法、装置、电子设备以及存储介质。


背景技术:

2.神经网络是一类包含卷积和全连接层且具有深度结构的前馈神经网络,具有表征学习能力,是深度学习的代表算法之一。主流的卷积神经网络量化方法是把训练完成的神经网络中所有层的数据类型均由float32(fp32,单精度浮点)量化到数据类型int8(八位整形),然后进行int8的计算推理,由于int8的标称算力是float32的四倍,这种方法通过减少大量float32计算,能够提高运算速度。但是,针对部分对精度要求高的任务,如果直接把神经网络量化为int8精度模型,会导致模型推理的精度降低,存在不可接受的精度损失,从而无法部署到具体应用。
3.现有技术中,对于有加速需求的神经网络,通常采用混合精度量化的方法,即只对神经网络中的卷积层、全连接层进行float32到int8的量化,其他层仍然采用float32的计算方式。由于网络计算量至少90%以上是卷积层和全连接层导致的,所以这样的混合精度量化可以在减少较大的float32计算量的情况下,保留原网络模型精度。
4.然而,如果多个卷积层或全连接层使用同一个输入数据,每个卷积层或全连接层做量化时,都需要对同一个输入数据做一次量化,造成一部分计算量的浪费,无法有效提高推理速度。


技术实现要素:

5.本技术主要解决的技术问题是提供一种数据类型转换方法、装置、电子设备以及存储介质,能够解决现有技术中无法有效提高神经网络运算速度的问题。
6.为解决上述技术问题,本技术采用的第一技术方案是提供一种数据类型转换方法,包括:确定神经网络的当前网络层的输出数据的数据类型;其中,数据类型包括第一数据类型与第二数据类型,第一数据类型的精度大于第二数据类型的精度;确定与当前网络层的输出数据相连的下一网络层的输入数据的数据类型;响应于当前网络层的输出数据的数据类型为第一数据类型,且连接的下一网络层的输入数据的总数量大于数据类型为第二数据类型的输入数据的数量,同时数据类型为第二数据类型的输入数据的数量大于设定数量,在当前网络层的输出节点后添加转换层;通过转换层接收当前网络层的输出数据,并将输出数据的数据类型由第一数据类型转换成第二数据类型,并将转换后的数据传输至数据类型为第二数据类型的输入数据对应的下一网络层。
7.其中,通过转换层接收当前网络层的输出数据,并将输出数据的数据类型由第一数据类型转换成第二数据类型,并将转换后的数据传输至数据类型为第二数据类型的输入数据对应的下一网络层的步骤,包括:基于量化算法获取数据类型为第二数据类型的输入数据对应的输入量化因子;基于当前网络层的输出数据、以及输入量化因子,确定转换后的
数据;将转换后的数据作为新的输入数据,输入至对应的下一网络层。
8.其中,第一数据类型包括单精度浮点,第二数据类型包括八位整形;神经网络的网络层包括量化层、第一运算层以及第二运算层;其中,量化层包括卷积层或全连接层,第一运算层为不进行数据精度计算的网络层,第二运算层为神经网络中除了量化层外需要进行数据精度计算的网络层;其中,第二运算层的输出数据与输入数据的数据类型均为第一数据类型;确定神经网络的当前网络层的输出数据的数据类型的步骤,包括:响应于当前网络层为量化层,且至少一个输出数据对应的输出量化因子为0,确定当前网络层的输出数据的数据类型为第一数据类型;响应于当前网络层为第一运算层,且至少一个输出数据对应的输出量化因子为0,确定当前网络层的输出数据的数据类型与输入数据的数据类型均为第一数据类型;响应于当前网络层为第二运算层,确定当前网络层的输出数据的数据类型与输入数据的数据类型均为第一数据类型。
9.其中,确定神经网络的当前网络层的输出数据的数据类型的步骤前,包括:将神经网络中每一个网络层的每一个输出数据的输出量化因子对应的第一数组均设置为空;遍历每一个量化层,获取到每一个量化层的输入数据以及对应的输入量化因子,基于每一个量化层的输入数据反向确定与其相连的最近的量化层;其中,每一个输入量化因子的数值均大于0;基于相连两个量化层之间的不同连接关系,调用对应的预设算法对位于下层的量化层的输入量化因子进行反向传播,直至在与其相连的最近的量化层以及两个量化层之间的全部中间层的第一数组中存入对应的输出量化因子;其中,输出量化因子为输入量化因子的数值或为0;输出量化因子通过如下方式确定:从当前网络层的每一个输出数据的输出量化因子对应的第一数组中调取存储的输出量化因子,并判断输出量化因子是否为0。
10.其中,基于相连两个量化层之间的不同连接关系,调用对应的预设算法对位于下层的量化层的输入量化因子进行反向传播,直至在与其相连的最近的量化层以及两个量化层之间的全部中间层的第一数组中存入对应的输出量化因子的步骤,包括:响应于相连两个量化层之间不存在中间层或中间层均为第一运算层,将位于下层的量化层的输入量化因子存入与位于下层的量化层相连的最近的量化层的第一数组中,以作为最近的量化层的输出量化因子;响应于两层量化层之间存在的中间层包括至少一个第二运算层,将0存入与位于下层的量化层相连的最近的量化层的第一数组中,以将0作为最近的量化层的输出量化因子。
11.其中,响应于两层量化层之间存在的中间层包括至少一个第二运算层,将0存入与位于下层的量化层相连的最近的量化层的第一数组中,以将0作为最近的量化层的输出量化因子的步骤,包括:将位于下层的量化层的输入量化因子反向传播至与其相连的最近的第二运算层的第一数组后,将输入量化因子设置为0,以将0作为最近的第二运算层的输出量化因子,同时将0作为最近的第二运算层的输入数据的输入量化因子,继续反向传播,直至将0反向传播至最近的量化层的第一数组中。
12.其中,确定与当前网络层的输出数据相连的下一网络层的输入数据的数据类型的步骤,包括:基于当前网络层的每一个输出数据的对应的第一数组中保存的输出量化因子的总数量以及输出量化因子为0的个数,确定与当前网络层的输出数据相连的下一网络层的输入数据的数据类型。
13.为解决上述技术问题,本技术采用的第二技术方案是提供一种数据类型转换装
置,包括:第一确定模块,用于确定神经网络的当前网络层的输出数据的数据类型;其中,数据类型包括第一数据类型与第二数据类型,第一数据类型的精度大于第二数据类型的精度;第二确定模块,用于确定与当前网络层的输出数据相连的下一网络层的输入数据的数据类型;转换层添加模块,用于响应于当前网络层的输出数据的数据类型为第一数据类型,且连接的下一网络层的输入数据的总数量大于数据类型为第二数据类型的输入数据的数量,同时数据类型为第二数据类型的输入数据的数量大于设定数量,在当前网络层的输出节点后添加转换层;数据类型转换模块,用于通过转换层接收当前网络层的输出数据,并将输出数据的数据类型由第一数据类型转换成第二数据类型,并将转换后的数据传输至数据类型为第二数据类型的输入数据对应的下一网络层。
14.为解决上述技术问题,本技术采用的第三技术方案是提供一种电子设备,包括:存储器,用于存储程序数据,存储程序数据被执行时实现如上述任一项所述的数据类型转换方法中的步骤;处理器,用于执行存储器存储的程序指令以实现如上述任一项所述的数据类型转换方法中的步骤。
15.为解决上述技术问题,本技术采用的第四技术方案是提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述任一项所述的数据类型转换方法中的步骤。
16.本技术的有益效果是:区别于现有技术,本技术提供一种数据类型转换方法、装置、电子设备以及存储介质,在确定当前网络层的同一个输出数据的数据格式与相连的多个输入数据的数据格式不同,且多个输入数据的数据格式为精度较低的第二数据类型时,通过在当前网络层的输出节点后添加转换层,并利用转换层对输出数据进行转换后再传输至对应的下一网络层,能够仅对输出数据做一次量化,从而避免多个网络层需要对输出数据做多次量化而导致的计算量浪费,继而有效提高推理速度。
附图说明
17.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
18.图1是本技术数据类型转换方法一实施方式的流程示意图;图2是确定每一网络层的具体连接关系的方法的流程图;图3为本技术反向传播量化因子的方法一应用场景的工作流程图;图4为图3中递归算法的具体流程示意图;图5是确定输出数据的数据类型的方法一实施方式的流程示意图;图6是本技术添加转换层的方法一实施方式的流程示意图;图7是获取输入数据的数据类型的方法一实施方式的流程示意图;图8是本技术转换层对数据类型进行转换的示意图;图9是本技术中层与层间的数据流为第二数据类型的示意图;图10是本技术数据类型转换装置一实施方式的结构示意图;图11是本技术电子设备一实施方式的结构示意图;
图12是本技术计算机可读存储介质一实施方式的结构示意图。
具体实施方式
19.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,均属于本技术保护的范围。
20.在本技术实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
21.应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
22.应当理解,本文中使用的术语“包括”、“包含”或者其他任何变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
23.基于上述情况,本技术提供一种数据类型转换方法、装置、电子设备以及存储介质,能够解决现有技术中无法进一步提高神经网络运算速度的问题。
24.下面结合附图和实施方式对本技术进行详细说明。
25.请参阅图1,图1是本技术数据类型转换方法一实施方式的流程示意图。在本实施方式中,该方法包括:s11:确定神经网络的当前网络层的输出数据的数据类型;其中,数据类型包括第一数据类型与第二数据类型,第一数据类型的精度大于第二数据类型的精度。
26.本实施方式中,第一数据类型包括单精度浮点(float32,fp32),第二数据类型包括八位整形(int8)。神经网络的网络层包括量化层、第一运算层以及第二运算层。
27.其中,量化层包括卷积层(conv)或全连接层(fc)。
28.其中,第一运算层为不进行数据精度计算的网络层。例如,relu(激活函数)、maxpooling(最大池化)、permute(多维数组)、reshape(改组)、pad(填充)、reverse(反转)、flatten(压平)层均只对数据进行搬移,并不存在数据计算。
29.其中,第二运算层为神经网络中除了量化层外需要进行数据精度计算的网络层,例如,归一化层。其中,第二运算层的输出数据与输入数据的数据类型均为第一数据类型。
30.本实施方式中,第一数据类型包括单精度浮点,第二数据类型包括八位整形(int)。
31.本实施方式中,为了理解方便,将第一运算层定义为int8层,将第二运算层定义为非int8层。
32.本实施方式中,当前网络层的输出数据的数据类型是由与其相连的下一网络层决
定的,例如,当前网络层的同一个输出数据同时是多个下一网络层的输入,如果多个下一网络层中不包括非int8层,则输出数据可以直接以int8格式进行输出,如果多个下一网络层中至少有一个为非int8层,则当前网络层的输出数据的数据类型必须设置为fp32。
33.本实施方式中,在确定当前网络层的输出数据的数据类型前,需要根据具体的神经网络结构,利用反传播量化因子的方式确定当前网络层的下一网络层是否包括非int8层。
34.其中,量化因子是在神经网络正向传播时,基于输入数据通过量化算法获取的,其作用是将输入数据的类型由fp32量化为int8。
35.具体地,请参阅图2,图2是确定每一网络层的具体连接关系的方法的流程图。本实施方式中,具体包括:s21:将神经网络中每一个网络层的每一个输出数据的输出量化因子对应的第一数组均设置为空。
36.本实施方式中,将神经网络中每一个网络层的每一个输出数据的量化因子保存至第一数组中,对第一数组进行初始化,以使每一个输出数据的输出量化因子对应的第一数组为空白单元,以用来保存每一个分支传播上来的量化因子。
37.由于神经网络是有向无环图,某一网络层可能有多个输入数据(例如,eltwise层、concat层等),也有可能有多个输出数据(例如,slice层),因此,若当前网络层的同一个输出数据为多个下一网络层的输入数据,则利用下一网络层的输入量化因子反向传播至当前网络层中对应该输出数据的第一数组时,第一数组中会保存多个分支传播上来的输入量化因子,以作为该输出数据的输出量化因子,以便后续基于输出量化因子的数量以及对应的数值确定该输出数据所连接的多个网络层的具体类型。
38.s22:遍历每一个量化层,获取到每一个量化层的输入数据以及对应的输入量化因子,基于每一个量化层的输入数据向上确定与其相连的最近的量化层;其中,每一个输入量化因子的数值均大于0。
39.本实施方式中,每一个量化层的输入数据对应的输入量化因子均是根据量化算法获取的。由于量化层获取的输入数据即为与其相连的上一网络层的输出数据,因此,基于输入数据与输出数据的匹配关系,可以确定与当前量化层连接的上一网络层,继而继续基于输入数据与输出数据的匹配关系确定相连路径,直至向上确定到与当前量化层相连的最近的量化层。遍历每一个量化层,可以确定具有相连路径的两个量化层之间的全部中间层的连接关系。
40.s23:基于相连两个量化层之间的不同连接关系,调用对应的预设算法对位于下层的量化层的输入量化因子进行反向传播,直至在与其相连的最近的量化层以及两个量化层之间的全部中间层的第一数组中存入对应的输出量化因子;其中,输出量化因子为输入量化因子的数值或为0。
41.在一个具体的实施场景中,响应于相连两个量化层之间不存在中间层或中间层均为第一运算层,将位于下层的量化层的输入量化因子存入与位于下层的量化层相连的最近的量化层的第一数组中,以作为最近的量化层的输出量化因子。
42.其中,如果相连的量化层之间无中间层,可以将位于下层的量化层的输入数据的输入量化因子直接反向传播至上一量化层的第一数组中,以作为上一量化层的输出数据的
输出量化因子,从而使上一量化层的输出数据可以利用位于下层的量化层的输入量化因子直接输出int8。
43.其中,如果相连的量化层之间存在中间层,且中间层全部为int8层,则将位于下层的量化层的输入数据的输入量化因子反向传播至与其相连的最近的int8层的第一数组中,以作为最近的int8层的输出数据的输出量化因子,同时将量化层的输入量化因子作为最近的int8层的输入量化因子,继续反向传播,直至将位于下层的量化层的输入量化因子反向传播至上一量化层的第一数组中。
44.在又一个具体的实施场景中,响应于两层量化层之间存在的中间层包括至少一个第二运算层,将0存入与位于下层的量化层相连的最近的量化层的第一数组中,以将0作为最近的量化层的输出量化因子。
45.其中,将位于下层的量化层的输入量化因子反向传播至与其相连的最近的非int8层的第一数组后,将输入量化因子设置为0,以将0作为最近的非int8层的输出量化因子,同时将0作为最近的非int8层的输入数据的输入量化因子,继续反向传播,直至将0反向传播至最近的量化层的第一数组中。
46.可以理解的,通过遍历每一层网络层的第一数组,并基于第一数组中保存的输出量化因子的数量与数值,可以确定每一个输出数据对应的全部下一连接层的具体类型。
47.具体地,请参阅图3与图4,图3为本技术反向传播量化因子的方法一应用场景的工作流程图,图4为图3中递归算法的具体流程示意图。
48.本实施方式中,首先将神经网络中的每一个所述网络层保存到第二数组中,遍历所述第二数组,将量化层对应的层数保存到第三数组中,设置量化层的总层数n为第三数组的大小。例如,神经网络总共有10层网络层,其中第2层、第5层以及第9层为量化层,则第二数组有10个数据,第三数组有3个数据,第0层数据即为第二数组中的第2层,第1层数据即为第二数组中的第5层,第2层数据即为第二数组中的第9层。接着初始化递归算法的循环次数i为0,判断循环次数是否小于n。响应于i小于n,将第三数组中第i层量化层的层数作为递归算法的初始值,将第i层量化层的输入数据作为初始化输入数据,将初始化输入数据的输入量化因子作为初始化量化因子(scale),进入递归算法。
49.递归算法流程如下:判断层数减1后是否小于0。
50.响应于层数减1后小于0,本次递归算法结束,循环次数加1,继续判断循环次数是否小于n。
51.响应于层数减1后不小于0,返回第二数组中查找对应层数的网络层,获取到该网络层的每一个输出数据,并依次遍历每一个所述输出数据,判断是否有输出数据与初始化输入数据相等。
52.响应于该网络层的全部输出数据中全部与初始化数据不等,表明该网络层不与第i层量化层相连,层数减1,继续判断层数减1后是否小于0;响应于网络层的第i个数据与初始化输入数据相等,将初始化量化因子存入第i个输出数据对应的第一数组中,作为第i个输出数据的一个输出量化因子。可以理解地,该网络层中仅会有一个输出数据与第i层量化层的输入数据相等,其余输出数据会在别的路径中与其余网络层连接。
53.继续判断网络层是否为量化层。
54.响应于该网络层为量化层,本次递归算法结束,循环次数加1,继续判断循环次数
是否小于n。可以理解地,递归算法就是基于每一个量化层的输入数据向上确定与其相连的最近的量化层,因此找到上一量化层后,本次递归算法就结束。
55.响应于该网络层不是量化层,判断网络层是否为第二运算层。
56.响应于该网络层是第二运算层,则将保存的输出量化因子设置为0,同时将0作为网络层的输入数据的输入量化因子。获取到网络层的输入数据的数量n,初始化i为0,判断i是否小于n。响应于i小于n,将网络层第i个输入数据作为新的初始化输入数据,进入递归算法,查找与网络层第i个输入数据相等的输出数据,以确定向上的相连路径,直至查找到量化层,本次递归算法结束,循环次数加1,判断i是否小于n。若i小于n,继续循环,直至i不小于n,表明网络层的全部输入数据已遍历完,层数减1,继续判断层数减1后是否小于0。
57.响应于网络层不是第二运算层,则直接获取到网络层的输入数据的数量n,初始化i为0,判断i是否小于n。响应于i小于n,将网络层第i个输入数据作为新的初始化输入数据,进入递归算法,查找与网络层第i个输入数据相等的输出数据,以确定向上的相连路径,直至查找到量化层,本次递归算法结束,循环次数加1,判断i是否小于n。若i小于n,继续循环,直至i不小于n,表明网络层的全部输入数据已遍历完,层数减1,继续判断层数减1后是否小于0。
58.通过上述方法,本实施方式能够在每一网络层的每一个输出数据对应的第一数组中存入每一个分支传播上来的输出量化因子,并基于当前网络层的类型以及当前网络层的第一数组中保存的输出量化因子的情况,对当前网络层的输出数据的数据类型进行设置。
59.具体地,请参阅图5,图5是确定输出数据的数据类型的方法一实施方式的流程示意图。本实施方式中,首先获取当前网络层的输出数据对应的第一数组,并判断第一数组是否为空。
60.若第一数组为空,表明当前网络层已为最后的输出层,没有可以反向传播上来的数据,将输出层的输出数据的数据类型设置为第一数据类型。
61.若第一数组不为空,计算第一数组中保存的输出量化因子的个数n_t,以及计算第一数组中输出量化因子大于0的个数n。判断n是否等于n_t。
62.响应于n等于n_t,将输出数据的数据类型设置为第二数据类型;响应于n不等于n_t,将输出数据的数据类型设置为第一数据类型。
63.可以理解地,输出量化因子的个数n_t即为输出数据的多个分支,表明有多个下一网络层使用该输出数据作为输入数据。若n等于n_t,表明第一数组中没有等于0的输出量化因子,即该输出数据对应的多个下一网络层没有非int8层,可以直接以int8格式输出。若n不等于n_t,表明第一数组中存在等于0的输出量化因子,即该输出数据对应的多个下一网络层中存在非int8层,需要将输出数据的数据类型设置为第一数据类型。
64.本实施方式中,输出量化因子通过如下方式确定:从当前网络层的每一个输出数据的输出量化因子对应的第一数组中调取存储的输出量化因子,并判断输出量化因子是否为0。
65.在一个具体的实施场景中,响应于当前网络层为量化层,且至少一个输出数据对应的输出量化因子为0,确定当前网络层的输出数据的数据类型为第一数据类型。
66.可以理解地,当至少一个输出数据对应的输出量化因子为0,表明将该输出数据作为输入数据的下一网络层中包括非int8层,因此需要将量化层的输出数据的数据类型设置
为fp32,以使非int8层获取到数据类型为fp32的输入数据。
67.对应的,如果任一输出数据的第一数组中保存的输出量化因子全部大于0,表明与量化层相连的多个下一网络层中不包括非int8层,此时将当前网络层的输出数据的数据类型设置为int8。
68.在另一个具体的实施场景中,响应于当前网络层为第一运算层,且至少一个输出数据对应的输出量化因子为0,确定当前网络层的输出数据的数据类型与输入数据的数据类型均为第一数据类型。
69.可以理解地,当int8层的至少一个输出数据对应的输出量化因子为0,表明将该输出数据作为输入数据的下一网络层中包括非int8层,因此需要将in8层的输出数据的数据类型设置为fp32,以使非int8层获取到数据类型为fp32的输入数据。
70.其中,区别于量化层只需要对输出数据的数据类型进行设置,int8层还需要对输入数据的数据类型进行设置,是因为对量化层输入数据类型为fp32或int8的输入数据,可以通过量化层内部的算子对数据类型进行转换,而int8层内部没有进行数据类型转换的算子,其输入数据的数据类型与输出数据的数据类型必须设置为一致,当int8层的输出数据的数据类型被设置为fp32时,其输入数据的数据类型同样被设置为fp32。
71.对应的,如果任一输出数据的第一数组中保存的输出量化因子全部大于0,表明与int8层相连的多个下一网络层中不包括非int8层,此时将当前网络层的输出数据的数据类型设置为int8。
72.在又一个具体的实施场景中,响应于当前网络层为第二运算层,确定当前网络层的输出数据的数据类型与输入数据的数据类型均为第一数据类型。
73.可以理解地,非int8层对应的数据流必须为fp32,因此在当前网络层为非int8层时,其输入数据与输出数据的数据类型必须设置为fp32。
74.s12:确定与当前网络层的输出数据相连的下一网络层的输入数据的数据类型。
75.本实施方式中,基于当前网络层的每一个输出数据的对应的第一数组中保存的输出量化因子的总数量以及输出量化因子为0的个数,确定与当前网络层的输出数据相连的下一网络层的输入数据的数据类型。
76.可以理解地,若某个输出数据的第一数组中存储有3个输出量化因子,其中1个输出量化因子为0,则表明该输出量化因子对应的下一网络层为非int8层,非int8层的输入数据的数据类型为fp32,剩余两个输出量化对应的则是int8层和/或量化层,输入数据的数据类型为int8。
77.s13:响应于当前网络层的输出数据的数据类型为第一数据类型,且连接的下一网络层的输入数据的总数量大于数据类型为第二数据类型的输入数据的数量,同时数据类型为第二数据类型的输入数据的数量大于设定数量,在当前网络层的输出节点后添加转换层。
78.其中,设定数量为1个。
79.具体地,请参阅图6,图6是本技术添加转换层的方法一实施方式的流程示意图。本实施方式中,首先获取当前网络层的输出数据对应的第一数组,并判断第一数组是否为空。
80.若第一数组为空,表明当前网络层已为最后的输出层,无需继续向下传输数据,不添加转换层。
81.若第一数组不为空,计算第一数组中保存的输出量化因子的个数n_t,以及计算第一数组中输出量化因子大于0的个数n。
82.判断n是否大于1且n是否小于n_t。
83.响应于n大于1且n小于n_t,在当前网络层的输出节点后添加转换层,并设置转换层的具体信息。
84.其中,n小于n_t,表明下一网络层中存在非int8层;n大于1,表明下一网络层中至少存在两个int8层和/或量化层。
85.可以理解地,下一网络层中存在非int8层,则当前网络层的输出数据的数据类型被设置为第一数据类型,以确保非int8层获取的输入数据为fp32格式。下一网络层中至少存在两个int8层和/或量化层,则表明有至少两个网络层需要格式为int8的输入数据,为了避免多个网络层对同一个输出数据做多次量化,才需要添加转换层。
86.可以理解地,如果n等于n_t,表明下一网络层中不存在非int8层,当前网络层的输出数据的数据类型会被直接设置为第二数据类型,无需进行转换;如果n不大于1,表明至多只有1个网络层需要int8格式的输入数据,只有一个网络层会对输出数据做一次量化,也无需添加转换层。
87.本实施方式中,在添加转换层后,可以利用下一网络层的输入数据的数据类型判断当前网络层的数据节点后是否添加有转换层。
88.具体地,请参阅图7,图7是获取输入数据的数据类型的方法一实施方式的流程示意图。本实施方式中,首先获取输入数据已被设置的数据类型,判断已被设置的数据类型是否为第一数据类型。
89.响应于已被设置的数据类型不为第一数据类型,获取输入数据的数据类型为第二数据类型。
90.响应于已被设置的数据类型为第一数据类型,判断输入节点前是否有转换层。
91.响应于输入节点前无转换层,获取输入数据的数据类型为第一数据类型;响应于输入节点前有转换层,获取输入数据的数据类型为第二数据类型。
92.s14:通过转换层接收当前网络层的输出数据,并将输出数据的数据类型由第一数据类型转换成第二数据类型,并将转换后的数据传输至数据类型为第二数据类型的输入数据对应的下一网络层。
93.本实施方式中,基于量化算法获取数据类型为第二数据类型的输入数据对应的输入量化因子,并基于当前网络层的输出数据、以及输入量化因子,确定转换后的数据,以将转换后的数据作为新的输入数据,输入至对应的下一网络层。
94.通过将当前网络层的输出数据乘以输入量化因子,得到转换后的数据。
95.可以理解地,由于多个下一网络层的输入数据为同一个输出数据,在输入数据相等的情况下,其对应的输入量化因子也是相等,因而可以使用一个输入量化因子作为转换因子,对输出数据的数据类型进行转换。
96.具体地,请参阅图8,图8是本技术转换层对数据类型进行转换的示意图。本实施方式中,第二运算层1的一个输出数据仅流入一个第二运算层2,第二运算层1与第二运算层2之间的数据流为第一数据类型(fp32)。第二运算层2具有两个不同输出数据,其中一个输出数据流入第二运算层3,第二运算层2与第二运算层3之间的数据流为第一数据类型;另一个
输出数据流入第一量化层、第二量化层与第三量化层,第一量化层、第二量化层与第三量化层的输入节点前设置有转换层,第二运算层2与转换层之间的数据流为第一数据类型,转换层接收输出数据后,将第二运算层2的输出数据乘以输入量化因子,得到第二数据类型的输入数据,继而流入3个量化层中。
97.其中,第二运算层1可以是eltwise层,第二运算层2可以是relu层,第二运算层3可以是eltwise层,本技术对此不作限定。
98.可以理解地,如果未添加转换层,3个量化层都需要对同一个输入做量化计算,导致计算量浪费,而本技术通过添加并利用转换层对输出数据进行转换后再传输至对应的下一网络层,能够仅对输出数据做一次量化,从而避免多个网络层需要对输出数据做多次量化而导致的计算量浪费,继而有效提高推理速度。
99.现有技术中,卷积层或全连接层接收到数据类型为fp32的输入数据x后,将x乘以一个固定的输入量化因子(scalex),得到数据类型为int8的x_q,将权重(weight)乘以一个固定的权重量化因子(saclew),得到数据类型为int8的w_q,为了防止数据溢出,x_q和w_q的矩阵乘积的数据类型为int32,所以将偏置(bias)乘以输入量化因子与权重量化因子的乘积(scalex*scalew),得到数据类型同样为int32的b_q,方便与x_q和w_q的矩阵乘积相加,以得到数据类型为in32的y_q。当输出数据y的数据类型需要转化为fp32时,将y_q除以(scalex*scalew),还原出数据类型为fp32的输出数据y,继而将输出数据传递给相连的下一网络层,使得层与层之间的数据流全部为fp32。这样虽然能够保证非int8层的运算精度,但对于不涉及数据精度运算的int8层而言,由于int8数据流即可满足其推理需求,若int8层与int8层或量化层之间的数据流仍为fp32,则无法有效减少层与层之间的数据传输耗时,无法减少推理过程中的数据传输带宽。
100.而本技术中,如果量化层与对应的下一层量化层之间全部为int8算子,即两层量化层直接相连或两层量化层之间的中间层全部为in8层,可以通过量化层对输入数据进行量化(quantize),并以int8的数据格式输出;如果存在非int算子,即两层量化层之间存在非int8层,则进行反量化(dequantize),以将输出数据的数据类型转换为fp32。
101.具体地,如图9所示,图9是本技术中层与层间的数据流为第二数据类型的示意图。本实施方式中,第一量化层与第二量化层之间的中间层为最大池化层与激活函数,均为int8层,即第一量化层与第二量化层之间不包括非int8层,此时第一量化层利用第二量化层反向传播上来的输入量化因子,可以直接将输入数据的数据类型由第一数据类型(fp32)转换为第二数据类型(int8),并将int8算子传输给最大池化层,且最大池化层与激活函数之间、激活函数与第二量化层之间的数据流也均是int8格式。
102.可以理解地,本技术将int8层与int8层或量化层之间的数据流由fp32优化为int8,能够减少推理过程中数据传输带宽,从而在减少内存消耗的同时,也减少数据传输的时间,继而进一步提高了推理速度。
103.进一步地,本技术为了方便在量化层内部对数据流进行转化,在量化层内部设置了“输入fp32输出fp32”、“输入fp32输出int8”、“输入int8输出fp32”和“输入int8输出int8”共4种算子。
104.其中,4种算子所需的公式如下:y
fp32
=w
fp32
*x
fp32
b
fp32
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
x
int8
=x
fp32
*scalex
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)w
int8
=w
fp32
*scalew
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)b
int32
=b
fp32
*scalew*scalex
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)y
fp32
=(w
int8
*x
int8
b
int32
)/(scalew*scalex)
ꢀꢀꢀꢀꢀꢀ
(5)scale=scaley/(scalew*scalex)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6)y
int8
=(w
int8
*x
int8
b
int32
)*scale
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(7)其中,y
fp32
为数据类型为fp32的输出数据,x
fp32
为数据类型为fp32的输入数据,w
fp32
为数据类型为fp32的权重,b
fp32
为数据类型为fp32的偏置,scalex为输入量化因子,scalew为权重量化因子,scaley为输出量化因子,x
int8
为数据类型为int8的输入数据,w
int8
为数据类型为int8的权重,y
int8
为数据类型为int8的输出数据。
105.可以理解地,通过上述多个公式,本技术无需事先判断神经网络中是否存在某种特殊的网络片段,即可对数据流进行各种变换,从而实现快速变换数据类型的目的。
106.区别于现有技术,本实施方式在确定当前网络层的同一个输出数据的数据格式与相连的多个输入数据的数据格式不同,且多个输入数据的数据格式为精度较低的第二数据类型时,通过在当前网络层的输出节点后添加转换层,并利用转换层对输出数据进行转换后再传输至对应的下一网络层,能够仅对输出数据做一次量化,从而避免多个网络层需要对输出数据做多次量化而导致的计算量浪费,继而有效提高推理速度。进一步地,通过将int8层与int8层或量化层之间的数据流由fp32优化为int8,能够减少推理过程中数据传输带宽,从而在减少内存消耗的同时,也减少数据传输的时间,继而进一步提高了推理速度。
107.本技术的数据类型转换方法可以用于ai(artificial intelligence,人工智能)开放平台或类似平台中,通过使平台搭载的神经网络在数据传输中更为高效便捷,从而提高平台的推理速度以及网络性能,继而提高用户的使用体验。
108.对应地,本技术提供一种数据类型转换装置。请参阅图10,图10是本技术数据类型转换装置一实施方式的结构示意图。如图10所示,该数据类型转换装置1000包括第一确定模块1001、第二确定模块1002、转换层添加模块1003以及数据类型转换模块1004。
109.第一确定模块1001,用于确定神经网络的当前网络层的输出数据的数据类型;其中,数据类型包括第一数据类型与第二数据类型,第一数据类型的精度大于第二数据类型的精度。
110.第二确定模块1002,用于确定与当前网络层的输出数据相连的下一网络层的输入数据的数据类型。
111.转换层添加模块1003,用于响应于当前网络层的输出数据的数据类型为第一数据类型,且连接的下一网络层的输入数据的总数量大于数据类型为第二数据类型的输入数据的数量,同时数据类型为第二数据类型的输入数据的数量大于设定数量,在当前网络层的输出节点后添加转换层。
112.数据类型转换模块1004,用于通过转换层接收当前网络层的输出数据,并将输出数据的数据类型由第一数据类型转换成第二数据类型,并将转换后的数据传输至数据类型为第二数据类型的输入数据对应的下一网络层。
113.其中,具体过程请参阅s11~s14、s21~s23中的相关文字描述,在此不再赘述。
114.区别于现有技术,本实施方式通过第一确定模块1001与第二确定模块1002在确定
当前网络层的同一个输出数据的数据格式与相连的多个输入数据的数据格式不同,且多个输入数据的数据格式为精度较低的第二数据类型时,通过转换层添加模块1003在当前网络层的输出节点后添加转换层,并利用转换层对输出数据进行转换后再传输至对应的下一网络层,能够仅对输出数据做一次量化,从而避免多个网络层需要对输出数据做多次量化而导致的计算量浪费,继而有效提高推理速度。
115.对应地,本技术提供一种电子设备。
116.具体地,请参阅图11,图11是本技术电子设备一实施方式的结构示意图。如图11所示,该异常声音分类装置1100包括相互耦接的存储器1101和处理器1102。
117.本实施方式中,存储器1101用于存储程序数据,程序数据被执行时可实现如上述任一项所述的数据类型转换方法中的步骤;处理器1102用于执行存储器1101存储的程序指令以实现上述任一项所述的数据类型转换方法中的步骤。
118.具体而言,处理器1102用于控制其自身以及存储器1101以实现上述任一数据类型转换方法实施例中的步骤。处理器1102还可以称为cpu(central processing unit,中央处理单元)。处理器1102可能是一种集成电路芯片,具有信号的处理能力。处理器1102还可以是通用处理器、数字信号处理器(digital signal processor, dsp)、专用集成电路(application specific integrated circuit, asic)、现场可编程门阵列(field-programmable gate array, fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。另外,处理器1102可以由多个集成电路芯片共同实现。
119.区别于现有技术,处理器1102在确定当前网络层的同一个输出数据的数据格式与相连的多个输入数据的数据格式不同,且多个输入数据的数据格式为精度较低的第二数据类型时,通过在当前网络层的输出节点后添加转换层,并利用转换层对输出数据进行转换后再传输至对应的下一网络层,能够仅对输出数据做一次量化,从而避免多个网络层需要对输出数据做多次量化而导致的计算量浪费,继而有效提高推理速度。进一步地,通过处理器1102将int8层与int8层或量化层之间的数据流由fp32优化为int8,能够减少推理过程中数据传输带宽,从而在减少内存消耗的同时,也减少数据传输的时间,继而进一步提高了推理速度。
120.对应地,本技术提供一种计算机可读存储介质。
121.请参阅图12,图12是本技术计算机可读存储介质一实施方式的结构示意图。
122.计算机可读存储介质1200包括计算机可读存储介质1200上存储的计算机程序1201,计算机程序1201被上述处理器执行时实现上述任一项所述的数据类型转换方法中的步骤。
123.具体地,集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质1200中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个计算机可读存储介质1200中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本技术各个实施方式方法的全部或部分步骤。而前述的计算机可读存储介质1200包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器
(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
124.在本技术所提供的几个实施例中,应该理解到,所揭露的方法和装置,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。
125.作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
126.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
127.集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本技术各个实施方式方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
128.以上所述仅为本技术的实施方式,并非因此限制本技术的专利范围,凡是利用本技术说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本技术的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献