通过编译神经网络模型得到计算机可执行指令的方法与流程

未命名 09-18 阅读:84 评论:0


1.本公开涉及人工智能技术,尤其是一种通过编译神经网络模型得到计算机可执行指令的方法。


背景技术:

2.在一些情况下,神经网络模型中存在用于实现呈浮点存储格式的两路输入的逐元素对应运算(这种运算可以简称为浮点逐元素对应运算)的网络层,浮点逐元素对应运算可以包括浮点逐元素对应相加运算、浮点逐元素对应相乘运算等。


技术实现要素:

3.为了解决目前浮点逐元素对应运算的运算开销大的技术问题,提出了本公开。本公开的实施例提供了一种通过编译神经网络模型得到计算机可执行指令的方法。
4.根据本公开实施例的第一个方面,提供了一种通过编译神经网络模型得到计算机可执行指令的方法,包括:
5.确定神经网络模型中用于执行浮点逐元素对应运算的目标网络层对应的标定量化系数;
6.从用于表示所述神经网络模型的代码文件中,确定用于表示所述目标网络层的运算规则的目标代码数据;
7.基于所述标定量化系数,对所述目标代码数据进行更新,以使经更新后的所述目标代码数据表示的运算规则的运算开销小于所述浮点逐元素对应运算;
8.基于所述目标代码数据经更新后的所述代码文件,通过编译处理生成所述神经网络模型对应的计算机可执行指令。
9.根据本公开实施例的第二个方面,提供了一种通过编译神经网络模型得到计算机可执行指令的装置,包括:
10.第一确定模块,用于确定神经网络模型中用于执行浮点逐元素对应运算的目标网络层对应的标定量化系数;
11.第二确定模块,用于从用于表示所述神经网络模型的代码文件中,确定用于表示所述第一确定模块确定的所述目标网络层的运算规则的目标代码数据;
12.更新模块,用于基于所述第一确定模块确定的所述标定量化系数,对所述第二确定模块确定的所述目标代码数据进行更新,以使经更新后的所述目标代码数据表示的运算规则的运算开销小于所述浮点逐元素对应运算;
13.生成模块,用于基于所述第二确定模块确定的所述目标代码数据经更新后的所述代码文件,通过编译处理生成所述神经网络模型对应的计算机可执行指令。
14.根据本公开实施例的第三个方面,提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述通过编译神经网络模型得到计算机可执行指令的方法。
15.根据本公开实施例的第四个方面,提供了一种电子设备,所述电子设备包括:
16.处理器;
17.用于存储所述处理器可执行指令的存储器;
18.所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述通过编译神经网络模型得到计算机可执行指令的方法。
19.根据本公开实施例的第五个方面,提供了一种计算机程序产品,当所述计算机程序产品中的指令被处理器执行时,执行上述通过编译神经网络模型得到计算机可执行指令的方法。
20.基于本公开上述实施例提供的通过编译神经网络模型得到计算机可执行指令的方法、装置、存储介质、电子设备及产品,可以在对神经网络模型进行编译的过程中,确定用于执行浮点逐元素对应运算(即呈浮点存储格式的两路输入之间的逐元素对应运算)的目标网络层,对神经网络模型的代码文件中,用于表示目标网络层的运算规则的目标代码数据进行更新,并将经更新后的目标代码数据用于神经网络模型对应的计算机可执行指令的生成,在推理阶段,通过执行神经网络模型对应的计算机可执行指令,目标网络层可以按照经更新后的目标代码数据表示的运算规则进行运算,这样,目标网络层执行的是与浮点逐元素对应运算等价或者基本等价,且运算开销更小的其他运算,由此能够以更小的运算开销实现浮点逐元素对应运算,从而能够大大提升运算效率。
21.下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
附图说明
22.图1-1是本公开一示例性实施例中神经网络模型的示意图。
23.图1-2是本公开另一示例性实施例中神经网络模型的示意图。
24.图1-3是本公开一示例性实施例中涉及的两个阶段执行的操作的示意图。
25.图1-4是浮点数值与定点数值之间的映射的示意图。
26.图2是本公开一示例性实施例提供的通过编译神经网络模型得到计算机可执行指令的方法的流程示意图。
27.图3是本公开一示例性实施例中对目标代码数据进行更新的方式的流程示意图之一。
28.图4是本公开一示例性实施例中对目标代码数据进行更新的方式的流程示意图之二。
29.图5是本公开一示例性实施例中浮点存储格式的示意图。
30.图6是本公开一示例性实施例中经更新后的目标代码数据表示的运算规则的示意图。
31.图7是本公开一示例性实施例中第三定点特征图的获得方式的流程示意图。
32.图8是本公开一示例性实施例中第一转换参考数据的获得方式的流程示意图之一。
33.图9是本公开一示例性实施例中第一转换参考数据的获得方式的流程示意图之二。
34.图10是本公开另一示例性实施例中对目标代码数据进行更新的方式的流程示意
图。
35.图11是本公开另一示例性实施例中经更新后的目标代码数据表示的运算规则的示意图。
36.图12是本公开一示例性实施例中第十一定点特征图的获得方式的流程示意图。
37.图13是本公开一示例性实施例中第二转换参考数据的获得方式的流程示意图。
38.图14是本公开一示例性实施例中浮点逐元素对应相乘运算的实现原理图。
39.图15是本公开一示例性实施例中浮点逐元素对应相加运算的实现原理图。
40.图16是本公开一示例性实施例提供的通过编译神经网络模型得到计算机可执行指令的装置的结构示意图。
41.图17是本公开另一示例性实施例提供的通过编译神经网络模型得到计算机可执行指令的装置的结构示意图。
42.图18是本公开一示例性实施例中用于实现经更新后的目标代码数据表示的运算规则的模块的结构示意图。
43.图19是本公开一示例性实施例中用于实现第一转换参考数据的获得的模块的结构示意图之一。
44.图20是本公开一示例性实施例中用于实现第一转换参考数据的获得的模块的结构示意图之二。
45.图21是本公开再一示例性实施例提供的通过编译神经网络模型得到计算机可执行指令的装置的结构示意图。
46.图22是本公开另一示例性实施例中用于实现经更新后的目标代码数据表示的运算规则的模块的结构示意图。
47.图23是本公开一示例性实施例中用于实现第二转换参考数据的获得的模块的结构示意图。
48.图24是本公开一示例性实施例提供的电子设备的结构图。
具体实施方式
49.为了解释本公开,下面将参考附图详细地描述本公开的示例实施例,显然,所描述的实施例仅是本公开的一部分实施例,而不是全部实施例,应理解,本公开不受示例性实施例的限制。
50.应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
51.申请概述
52.浮点逐元素对应运算是指呈浮点存储格式的两路输入(例如两路输入特征图)之间的逐元素对应运算(例如逐元素对应相加运算、逐元素对应相乘运算等),这样,浮点逐元素对应运算可以包括浮点逐元素对应相加运算、浮点逐元素对应相乘运算等。
53.可以理解的是,浮点存储格式是与定点存储格式不同的存储格式,定点存储格式包括但不限于int8、int16、int24等,浮点存储格式包括但不限于float16、float32、float64等。
54.如图1-1所示,神经网络模型可以包括:残差卷积网络,残差卷积网络可以包括:池
化层、卷积层、残差层和修正线性单元(rectified linear unit,relu)层,池化层的输出可以作为残差层的一路输入(其呈浮点存储格式),卷积层的输出可以作为残差层的另一路输入(其呈浮点存储格式),残差层可以对两路输入进行浮点逐元素对应相加运算。
55.如图1-2所示,神经网络模型可以包括:局部自注意力网络,局部自注意力网络可以包括:卷积层、全局池化层、全连接层、激活层和特征图相乘层,卷积层的输出可以作为特征图相乘层的一路输入(其呈浮点存储格式),激活层的输出可以作为特征图相乘层的另一路输入(其呈浮点存储格式),特征图相乘层可以对两路输入进行浮点逐元素对应相乘运算。可选地,激活层可以利用sigmoid激活函数(也可以称为s型生长曲线)进行激活处理。
56.在实现本公开的过程中,发明人发现,浮点逐元素对应运算存在运算开销大的问题,因此,有必要采用一种运算开销更小的方式,实现浮点逐元素对应运算。
57.示例性系统
58.本公开的实施例中,如图1-3所示,神经网络模型涉及两个阶段,分别是编译阶段和推理阶段。在编译阶段,可以确定神经网络模型中用于执行浮点逐元素对应运算的网络层;从用于表示神经网络模型的代码文件中,确定用于表示该网络层的运算规则的代码数据,并对该代码数据进行更新,以使经更新后的该代码数据表示的运算规则的运算开销小于浮点逐元素对应运算,经更新后的该代码数据表示的运算规则与浮点逐元素对应运算可以是等价或者基本等价的;依据该代码数据经更新后的代码文件,生成神经网络模型对应的计算机可执行指令。在推理阶段,可以通过执行神经网络模型对应的计算机可执行指令,以更小的运算开销实现浮点逐元素对应运算。
59.可选地,与浮点逐元素对应运算等价或者基本等价,且运算开销更小的其他运算可以包括如下运算:量化运算、定点运算和反量化运算。
60.量化运算可以是将浮点存储格式转换为定点存储格式的一种模型压缩方式。一般而言,从浮点存储格式量化至int8这种定点存储格式的流程如下:
61.(1)统计特征图、权重的所有数值的绝对值,从中确定绝对值的最大值maxval;
62.(2)采用如下公式,确定量化系数scale:
63.scale=maxval/127
64.其中,scale能够将-127至127之间的254个数值中的每个数值均映射至浮点存储格式,具体可参见图1-4所示的效果;
65.(3)采用如下公式,对特征图、权重的所有数值进行量化:
66.fval=i8val*scale
67.其中,i8val为特征图、权重的所有数值中的任一个数值,fval为该数值的量化结果。
68.在一个例子中,神经网络模型中的某个权重在量化运算之前可以使用float32这种浮点存储格式进行存储,在量化运算之后可以使用int8这种定点存储格式进行存储。
69.定点运算包括但不限于定点加法运算、定点乘法运算、定点移位运算、定点逐元素对应运算等。
70.反量化运算是与量化运算逆向的运算,那么,反量化运算可以是将定点存储格式转换为浮点存储格式的一种模型解压缩方式。
71.在一个例子中,神经网络模型中的某个权重在反量化运算之前可以使用int8这种
定点存储格式进行存储,在反量化运算之后可以使用float32这种浮点存储格式进行存储。
72.示例性方法
73.图2是本公开一示例性实施例提供的通过编译神经网络模型得到计算机可执行指令的方法的流程示意图。图2所示的方法可以包括步骤210、步骤220、步骤230和步骤240,下面分别对各步骤进行说明。
74.步骤210,确定神经网络模型中用于执行浮点逐元素对应运算的目标网络层对应的标定量化系数。
75.需要说明的是,步骤210中涉及的神经网络模型可以为需要进行编译的模型,步骤210中涉及的目标网络层可以为神经网络模型中用于执行浮点逐元素对应运算的任一网络层。可选地,目标网络层可以为图1-1所示的残差层;或者,目标网络层可以为图1-2所示的特征图相乘层。
76.在本公开的一些可选实施方式中,可以人为地提供一个特征图组,特征图组可以包括:用于模拟目标网络层的两路输入的特征图f1和特征图f2,以及用于模拟目标网络层的输出的特征图f3,基于f1、f2、f3,可以通过离线标定,得到目标网络层对应的标定量化系数;其中,标定量化系数可以包括:f1对应的第一量化系数、f2对应的第二量化系数,以及f3对应的第三量化系数。
77.假设f1、f2、f3均采用int8这种定点存储格式进行存储,f1中的最大数值表示为float_ihs.max(),f2中的最大数值表示为float_rhs.max(),f3中的最大数值表示为float_res.max(),则有:
78.f1对应的第一量化系数=float_lhs.max()/127
79.f2对应的第二量化系数=float_rhs.max()/127
80.f3对应的第三量化系数=float_res.max()/127
81.步骤220,从用于表示神经网络模型的代码文件中,确定用于表示目标网络层的运算规则的目标代码数据。
82.需要说明的是,用于表示神经网络模型的代码文件可以包括:神经网络模型中的多个网络层各自对应的子代码文件;其中,任一网络层对应的子代码文件可以包括:该网络层的运行所必须的数据。可选地,任一网络层对应的子代码文件可以包括如下数据中的至少一种:用于表示该网络层的层参数的代码数据;用于表示该网络层支持的输入输出尺寸的代码数据;用于表示该网络层的运算规则的代码数据等。本公开的实施例中涉及的任一代码数据均可以包括采用预设程序设计语言编写的程序代码,预设程序设计语言包括但不限于c语言、c++语言、java语言等。
83.在步骤220中,可以在用于表示神经网络模型的代码文件中,搜索目标网络层对应的子代码文件,并在目标网络层对应的子代码文件中,搜索用于表示目标网络层的运算规则的代码数据以作为目标代码数据。
84.步骤230,基于标定量化系数,对目标代码数据进行更新,以使经更新后的目标代码数据表示的运算规则的运算开销小于浮点逐元素对应运算。
85.在步骤230中,可以由编译器基于标定量化系数,对目标代码数据进行更新,经更新后的目标代码数据表示的运算规则可以包括如下运算:量化运算、定点运算、反量化运算。
86.当然,经更新后的目标代码数据表示的运算规则包括的运算并不局限于此,只需保证其与浮点逐元素对应运算等价或者基本等价,且运算开销更小即可。
87.步骤240,基于目标代码数据经更新后的代码文件,通过编译处理生成神经网络模型对应的计算机可执行指令。
88.在步骤240中,可以由编译器基于目标代码数据经更新后的代码文件进行编译处理,从而生成神经网络模型对应的计算机可执行指令,具体编译处理方式可以根据实际需求采用任意可实施的方式,本公开对此不做限定。
89.需要说明的是,推理阶段可以执行步骤240中生成的计算机可执行指令,这时,神经网络模型中的目标网络层可以按照经更新后的目标代码数据表示的运算规则,对自身的两路输入进行运算。
90.基于本公开上述实施例提供的通过编译神经网络模型得到计算机可执行指令的方法,可以在对神经网络模型进行编译的过程中,确定用于执行浮点逐元素对应运算(即呈浮点存储格式的两路输入之间的逐元素对应运算)的目标网络层,对神经网络模型的代码文件中,用于表示目标网络层的运算规则的目标代码数据进行更新,并将经更新后的目标代码数据用于神经网络模型对应的计算机可执行指令的生成,在推理阶段,通过执行神经网络模型对应的计算机可执行指令,目标网络层可以按照经更新后的目标代码数据表示的运算规则进行运算,这样,目标网络层执行的是与浮点逐元素对应运算等价或者基本等价,且运算开销更小的其他运算,由此能够以更小的运算开销实现浮点逐元素对应运算,从而能够大大提升运算效率。
91.在一些可选示例中,如图3所示,步骤230中的基于标定量化系数,对目标代码数据进行更新,包括步骤2301、步骤2303和步骤2305。
92.步骤2301,基于标定量化系数,确定目标网络层对应的第一输入量化系数、第二输入量化系数和输出量化系数。
93.参考上文中对步骤210的相关介绍,标定量化系数可以包括f1对应的第一量化系数、f2对应的第二量化系数,以及f3对应的第三量化系数。在步骤2301中,可以将f1对应的第一量化系数作为第一输入量化系数,将f2对应的第二量化系数作为第二输入量化系数,将f3对应的第三量化系数作为输出量化系数。
94.假设第一输入量化系数表示为scale_lhs,第二输入量化系数表示为scale_rhs,输出量化系数表示为scale_res,则有:
95.scale_lhs=float_lhs.max()/127
96.scale_rhs=float_rhs.max()/127
97.scale_res=float_res.max()/127
98.当然,步骤2301的实施方式并不局限于此,例如,可以人为地提供多个特征图组,利用多个特征图组,可以计算得到多个第一量化系数、多个第二量化系数和多个第三量化系数,那么,可以将多个第一量化系数的均值作为第一输入量化系数,将多个第二量化系数的均值作为第二输入量化系数,并将多个第三量化系数的均值作为输出量化系数。
99.步骤2303,基于第一输入量化系数和第二输入量化系数,确定基准量化系数。
100.在本公开的一些可选实施方式中,步骤2303,包括:
101.确定第一输入量化系数和第二输入量化系数中数值较大的目标输入量化系数;
102.以第一预设值作为底数,以第二预设值作为指数进行幂运算,得到第六运算结果;
103.基于目标输入量化系数与第六运算结果之间的数值关系,确定基准量化系数。
104.可选地,第一预设值可以为2,第二预设值可以为15。当然,第一预设值和第二预设值的取值并不局限于此,例如,第一预设值还可以为4,第二预设值还可以为16或者17,在此不再一一列举。为了便于理解,本公开的实施例中均以第一预设值为2,第二预设值为15的情况为例进行说明,这样,第六运算结果可以表示为2
15

105.由于第一输入量化系数表示为scale_lhs,第二输入量化系数表示为scale_rhs,通过对scale_lhs和scale_rhs进行大小比较,能够高效可靠地筛选出两者中数值较大的一者作为目标输入量化系数。假设目标输入量化系数表示为scale_max,则有:
106.scale_max=max(scale_lhs,scale_rhs)
107.基于目标输入量化系数与第六运算结果之间的数值关系,可以确定基准量化系数;其中,目标输入量化系数与第六运算结果之间的数值关系可以是指目标输入量化系数与第六运算结果之间的倍数关系。
108.可选地,目标输入量化系数与第六运算结果之间的数值关系可以用目标输入量化系数与第六运算结果的比值进行表示,即可以表示为scale_max/2
15
,这种情况下,可以直接将目标输入量化系数与第六运算结果的比值作为基准量化系数。假设基准量化系数表示为scale_add,则有:
109.scale_add=scale_max/2
15
=max(scale_lhs,scale_rhs)/2
15
110.当然,目标输入量化系数与第六运算结果之间的数值关系也可以用第六运算结果与目标输入量化系数的比值进行表示,即可以表示为2
15
/scale_max,这种情况下,可以将第六运算结果与目标输入量化系数的比值的倒数作为基准量化系数。
111.这种实施方式中,结合大小比较运算和幂运算,再通过数值关系的运用,能够高效可靠地确定基准量化系数。
112.步骤2305,基于第一输入量化系数、第二输入量化系数、输出量化系数和基准量化系数,对目标代码数据进行更新。
113.在本公开的一些可选实施方式中,步骤2305,包括:
114.基于第一输入量化系数与基准量化系数之间的数值关系,确定第一重量化系数;
115.基于第二输入量化系数与基准量化系数之间的数值关系,确定第二重量化系数;
116.基于基准量化系数与输出量化系数之间的数值关系,确定第三重量化系数;
117.基于第一输入量化系数、第二输入量化系数、输出量化系数、基准量化系数、第一重量化系数、第二重量化系数和第三重量化系数,对目标代码数据进行更新。
118.需要说明的是,第一重量化系数、第二重量化系数和第三重量化系数的确定方式可以参考上文中对基于目标输入量化系数与第六运算结果之间的数值关系,确定基准量化系数的方式的介绍,在此不再详细展开。
119.假设第一重量化系数表示为rescale_lhs,第二重量化系数表示为rescale_rhs,第三重量化系数表示为rescale_res,则有:
120.rescalelhs=scale_lhs/scale_add
121.rescale_rhs=scale_rhs/scale-add
122.rescale_res=scale_add/scale_res
123.这种实施方式中,通过量化系数之间的数值关系的运算,能够高效可靠地实现重量化系数的确定,以便将确定出的重量化系数与基于标定量化系数得到的量化系数一并用于目标代码数据的更新,从而保证经更新后的目标代码数据表示的运算规则满足要求。
124.在本公开的另一些可选实施方式中,如图4所示,步骤2305,包括步骤23051、步骤23053、步骤23055、步骤23057和步骤23059。
125.步骤23051,基于基准量化系数,确定第一输入量化系数对应的第一重量化系数、第二输入量化系数对应的第二重量化系数,以及输出量化系数对应的第三重量化系数。
126.需要说明的是,第一重量化系数至第三重量化系数的确定方式参照步骤2305的上一实施方式中的相关介绍即可,在此不再详细展开。
127.步骤23053,将第一重量化系数和第二重量化系数中,除了数值较大的目标重量化系数之外的另一重量化系数分解为第一阶码和第一尾数。
128.假设目标输入量化系数为第一输入量化系数和第二输入量化系数中数值较大的输入量化系数,则目标输入量化系数对应的重量化系数可以作为目标重量化系数。
129.在一个例子中,第一输入量化系数和第二输入量化系数中,第一输入量化系数的数值较大,则目标输入量化系数为第一输入量化系数,目标重量化系数为第一重量化系数,第一重量化系数和第二重量化系数中,除了目标重量化系数之外的另一重量化系数为第二重量化系数,第二重量化系数可以呈浮点存储格式。
130.这样,在步骤23053中,可以将第二重量化系数拆成科学计数法的表示形式,即拆成a*2b的表示形式,其中,a可以继续拆分为两部分,分别是数符和阶码,该阶码可以作为第一阶码,b可以直接作为第一尾数。
131.在一个例子中,如图5所示,第二重量化系数为0.15625,则第一阶码可以为01111100,第一尾数可以为01000000000000000000000。
132.步骤23055,确定第一尾数中的高预设位数。
133.可选地,第一尾数中的高预设位数可以为第一尾数中的高15位,第一尾数中的高15位可以采用extractbits实现;其中,extractbits是一种输入位运算函数,功能是按照左开右闭的方式,截取给定数据中的一部分。由于第二重量化系数表示为rescale_rhs,第一尾数中的高预设位数可以表示为extractbits(rescale_rhs,8,23)。
134.当然,第一尾数中的高预设位数还可以为第一尾数中的高16位、高17位等,在此不再一一列举。为了便于理解,本公开的实施例中均以高预设位数为高15位的情况为例进行说明。
135.步骤23057,确定预设位数与第一阶码的第一差值。
136.由于高预设位数为高15位,在步骤23057中,通过将15与第一阶码做差,可以高效可靠地得到第一差值。
137.由于第二重量化系数表示为rescale_rhs,第一阶码可以表示为extractsignedbits(rescale_rhs,23,31),第一差值可以表示为15-extractsignedbits(rescale_rhs,23,31);其中,extractsignedbits的功能与extractbits类似,区别主要在于,利用extractsignedbits得到的截取结果的高位视为符号位。
138.步骤23059,基于第一输入量化系数、第二输入量化系数、输出量化系数、基准量化系数、目标重量化系数、第一尾数中的高预设位数、第一差值和第三重量化系数,对目标代
码数据进行更新。
139.在本公开的一些可选实施方式中,通过对目标代码数据进行更新,可以使经更新后的目标代码数据表示的运算规则包括:针对目标网络层的第一浮点输入特征图和第二浮点输入特征图,执行图6所示的步骤610、步骤620、步骤630和步骤640。
140.步骤610,利用第一输入量化系数,对第一浮点输入特征图进行量化运算,得到第一定点特征图。
141.可选地,对第一浮点输入特征点进行量化运算可以采用如下公式:
142.i8_lhs=quantize(float_lhs,scale_lhs)
143.其中,i8_lhs表示第一定点特征图,quantize表示量化运算,float_lhs表示第一浮点输入特征图,scale_res表示第一输入量化系数。
144.步骤620,利用第二输入量化系数,对第二浮点输入特征图进行量化运算,得到第二定点特征图。
145.可选地,对第二浮点输入特征点进行量化运算可以采用如下公式:
146.i8_rhs=quantize(float_rhs,scale_rhs)
147.其中,i8_rhs表示第二定点特征图,quantize表示量化运算,float_rhs表示第二浮点输入特征图,scale_rhs表示第二输入量化系数。
148.步骤630,基于基准量化系数、目标重量化系数、第一尾数中的高预设位数、第一差值和第三重量化系数,对第一定点特征图和第二定点特征图进行第一类定点运算,得到第三定点特征图。
149.在本公开的一些可选实施方式中,如图7所示,步骤630,包括步骤6301、步骤6303、步骤6305、步骤6307和步骤6309。
150.步骤6301,以目标重量化系数作为放大系数,对第一定点特征图和第二定点特征图中,目标重量化系数对应的输入量化系数所对应的目标定点特征图进行元素放大运算,得到第四定点特征图。
151.可选地,目标重量化系数对应的输入量化系数可以为上文中的目标输入量化系数。假设目标输入量化系数为第一输入量化系数,则目标输入量化系数对应的目标定点特征图为第一定点特征图。在步骤6301中,针对第一定点特征图中的每个数值,可以将该数值与目标重量化系数相乘,并将相乘结果作为第四定点特征图中相应位置的数值,由此可以得到完整的第四定点特征图。
152.步骤6303,以第一尾数中的高预设位数作为放大系数,对第一定点特征图和第二定点特征图中除了目标定点特征图之外的另一定点特征图进行元素放大运算,得到第五定点特征图。
153.由于目标定点特征图为第一定点特征图,第一定点特征图和第二定点特征图中除了目标定点特征图之外的另一定点特征图为第二定点特征图。在步骤6303中,针对第二定点特征图中的每个数值,可以将该数值与第一尾数中的高预设位数相乘,并将相乘结果作为第五定点特征图中相应位置的数值,由此可以得到完整的第五定点特征图。
154.步骤6305,以第一差值作为移位值,对第五定点特征图进行元素向右移位运算,得到第六定点特征图。
155.在步骤6305中,针对第五定点特征图中的每个数值,可以将该数值向右移第一差
值位(这相当于将该值放大2
第一差值
倍),并将移位结果作为第六定点特征图中相应位置的数值,由此可以得到完整的第六定点特征图。
156.步骤6307,对第四定点特征图和第六定点特征图进行逐元素对应相加运算,得到第七定点特征图。
157.需要说明的是,第四定点特征图和第六定点特征图的尺寸可以相同。在步骤6307中,针对第四定点特征图中的每个数值,可以将该数值与第六定点特征图中的相应位置的数值进行定点加法运算,并将加法运算结果作为第七定点特征图中相应位置的数值,由此可以得到完整的第七定点特征图。
158.步骤6309,基于根据第三重量化系数得到的第一转换参考数据,对第七定点特征图进行第一存储格式转换运算,得到存储格式与第一定点特征图一致的第三定点特征图。
159.需要说明的是,第七定点特征图的定点存储格式可以不同于第一定点特征图,例如,第一定点特征图可以呈int8这种定点存储格式,第七定点特征图可以呈int24这种定点存储格式。
160.对于第一定点特征图呈int8这种定点存储格式,第七定点特征图呈int24这种定点存储格式的情况,在步骤6309中,依据第一转换参考数据,可以直接将第七定点特征图由int24这种定点存储格式转换为int8这种定点存储格式,以得到第三定点特征图;或者,依据第一转换参考数据,可以先将第七定点特征图由int24这种定点存储格式转换为int16这种定点存储格式,再由int16这种定点存储格式转换为int8这种定点存储格式,由此得到第三定点特征图。
161.这种实施方式中,参考基准量化系数、目标重量化系数、第一尾数中的高预设位数、第一差值和第三重量化系数,可以针对第一定点特征图和第二定点特征图,通过元素放大运算、移位运算、逐元素对应相加运算、存储格式转换运算等运算开销小、逻辑简单的定点运算的执行,高效可靠地得到第三定点特征图。
162.步骤640,利用输出量化系数,对第三定点特征图进行反量化运算,得到目标网络层的浮点输出特征图。
163.可选地,对第三定点特征图进行反量化运算可以采用如下公式:
164.float_res=dequantize(i8_res,scale_res)
165.其中,float_res表示浮点输出特征图,i8_res表示第三定点特征图,scale_res表示输出量化系数。
166.采用图6所示实施例,经更新后的目标代码数据表示的运算规则依次包括量化运算、定点运算和反量化运算,可以理解的是,量化运算、定点运算和反量化运算的运算开销均小于浮点运算,这样,通过按照经更新后的目标代码数据表示的运算规则进行运算,能够以更小的运算开销实现呈浮点存储格式的两路输入(即第一浮点输入特征图与第二浮点输入特征图)之间的逐元素对应相加运算。
167.在本公开的一些可选实施方式中,如图8所示,第一转换参考数据的获得方式可以包括步骤810、步骤820、步骤830、步骤840和步骤850。
168.步骤810,以第一预设值作为底数,以第三预设值作为指数进行幂运算,得到第一运算结果。
169.可选地,第一预设值可以为2,第三预设值可以为8,这样,第一运算结果可以表示
为28。
170.步骤820,基于第三重量化系数与第一运算结果之间的数值关系,确定第二运算结果。
171.可选地,第三重量化系数与第一运算结果之间的数值关系可以是指第三重量化系数与第一运算结果之间的倍数关系,例如,第三重量化系数与第一运算结果之间的数值关系可以用第三重量化系数与第一运算结果的比值进行表示,这种情况下,可以直接将第三重量化系数与第一运算结果的比值作为第二运算结果。假设第三重量化系数表示为rescale_res,第一运算结果表示为28,则第二运算结果可以表示为rescale_res/28。
172.当然,第三重量化系数与第一运算结果之间的数值关系也可以用第一运算结果与第三重量化系数的比值进行表示,这种情况下,可以将第一运算结果与第三重量化系数的比值的倒数作为第二运算结果。
173.步骤830,对第一预设值与第二运算结果的第一乘积进行对数运算,得到第三运算结果。
174.由于第一预设值为2,第二运算结果表示为rescale_res/28,第一乘积可以表示为2(rescale_res/28)。在步骤830中,可以对第一乘积进行底数为10的对数运算,以得到第三运算结果,第三运算结果可以表示为log2(rescale_res/28)。
175.步骤840,对第三运算结果进行第一预设数值区间内的向下取整运算,得到第四运算结果。
176.可选地,第一预设数值区间可以为0至8,这样,第四运算结果可以采用如下公式计算:
177.第四运算结果=clip{floor[log2(rescale_res/28)],0,8}
[0178]
其中,clip表示一种具有裁剪功能的函数。具体地,如果floor[log2(rescale_res/28)]位于0至8之间,第四运算结果为floor[log2(rescale_res/28)];如果floor[log2(rescale_res/28)]小于0,第四运算结果为0;如果floor[log2(rescale_res/28)]大于8,第四运算结果为8。
[0179]
步骤850,基于第一预设值、第三重量化系数、第四运算结果和预设位数,确定第一转换参考数据。
[0180]
在本公开的一些可选实施方式中,步骤850,包括:
[0181]
以第一预设值作为底数,第四运算结果作为指数进行幂运算,得到第五运算结果;
[0182]
基于第三重量化系数与第五运算结果的第二乘积,确定第四重量化系数;
[0183]
将第四重量化系数分解为第二阶码和第二尾数;
[0184]
确定第二尾数中的高预设位数;
[0185]
确定预设位数与第二阶码的第二差值;
[0186]
基于第四运算结果、第二尾数中的高预设位数和第二差值,确定第一转换参考数据。
[0187]
假设第一预设值为2,令第四运算结果表示为rightshift1,则第五运算结果可以表示为2
rightshift1
,第三重量化系数与第五运算结果的第二乘积满足:
[0188]
第二乘积=rescale res*2
rightshift1
=scale add*2
rightshift1
/scale res
[0189]
这里,第二乘积可以直接作为第四重量化系数,假设第四重量化系数表示为
rescale_res

,则有:
[0190]
rescale_res

=scale_add*2
rightshift1
/scale_res
[0191]
需要说明的是,将第四重量化系数分解为第二阶码和第二尾数的方式参照上文中对步骤23053的相关介绍即可,在此不再详细展开。假设第二尾数中的高预设位数表示为i16rescale_res

,则有:
[0192]
i16rescale_res

=extractbits(rescale_res

,8,23)
[0193]
假设预设位数与第二阶码的第二差值表示为rightshift2,则有:
[0194]
rightshift2=15-extractsignedbits(rescale_res

,23,31)
[0195]
在本公开的一些可选实施方式中,第一转换参考数据包括:第四运算结果、第二尾数中的高预设位数和第二差值;
[0196]
基于根据第三重量化系数得到的第一转换参考数据,对第七定点特征图进行第一存储格式转换运算,得到存储格式与第一定点特征图一致的第三定点特征图,包括:
[0197]
以第四运算结果作为移位值,对第七定点特征图进行第二预设数值区间内的元素向右移位运算,得到第八定点特征图;
[0198]
以第二尾数中的高预设位数为放大系数,对第八定点特征图进行元素放大运算,得到第九定点特征图;
[0199]
以第二差值作为移位值,对第九定点特征图进行第三预设数值区间内的元素向右移位运算,得到第三定点特征图。
[0200]
可选地,第二预设数值区间可以为-32767至32767,第三预设数值区间可以为-127至127。
[0201]
假设第四运算结果表示为rightshift1,第七定点特征图表示为i24result,第八定点特征图可以表示为i16result,则有:
[0202]
i16result=clip(i24result>>rightshift1.-32767.32767)
[0203]
其中,>>表示右移运算。
[0204]
这样,第九定点特征图可以表示为i16result*i16rescale_res

。假设第三定点特征图表示为i8result,则i8result可以采用如下公式得到:
[0205]
i8result=clip(i16result*i16rescale_res

>>rightshift1,-127,127)
[0206]
这样,通过基于第一预设值、第三重量化系数、第四运算结果和预设位数确定的第一转换参考数据的运用,能够先将第七定点特征图由int24这种定点存储格式转换为int16这种定点存储格式,再由int16这种定点存储格式转换为int8这种定点存储格式,由此能够以较低的硬件成本得到第三定点特征图,从而有利于减小实现浮点逐元素对应运算所需的硬件成本。
[0207]
在本公开的另一些可选实施方式中,如图9所示,第一转换参考数据的获得方式可以包括步骤910、步骤920、步骤930和步骤940。
[0208]
步骤910,将第三重量化系数分解为第三阶码和第三尾数。
[0209]
步骤920,确定第三尾数中的高预设位数。
[0210]
步骤930,确定预设位数与第三阶码的第三差值。
[0211]
需要说明的是,步骤910至步骤930的具体实施方式参照上文中对步骤23053至步骤23057的相关介绍即可,在此不再详细展开。
[0212]
由于第三重量化系数表示为rescale_res,第三尾数中的高预设位数可以表示为extractbits(rescale_res,8,23),第三差值可以表示为15-extractsignedbits(rescale_res,23,31)。
[0213]
步骤940,基于第三尾数中的高预设位数和第三差值,确定第一转换参考数据。
[0214]
在本公开的一些可选实施方式中,第一转换参考数据包括:第三尾数中的高预设位数和第三差值;
[0215]
基于根据第三重量化系数得到的第一转换参考数据,对第七定点特征图进行第一存储格式转换运算,得到存储格式与第一定点特征图一致的第三定点特征图,包括:
[0216]
以第三尾数中的高预设位数作为放大系数,对第七定点特征图进行元素放大运算,得到第十定点特征图;
[0217]
以第三差值作为移位值,对第十定点特征图进行第三预设数值区间内的元素向右移位运算,得到第三定点特征图。
[0218]
可选地,第三预设数值区间可以为-127至127。
[0219]
假设第七定点特征图表示为i24result,则第十定点特征图可以表示为extractbits(rescale_res,8,23)*i24result。假设第三定点特征图表示为i8result,则i8result可以采用如下公式得到:
[0220]
i8result=clip[i24result*extractbits(rescale_res,8,23)>>15-extractsignedbits(rescale_res,23,31),-127,127]
[0221]
这样,通过基于第三重量化系数确定的第一转换参考数据的运用,能够将第七定点特征图直接由int24这种定点存储格式转换为int8这种定点存储格式,由此能够高效快捷地得到第三定点特征图。
[0222]
在一些可选示例中,如图10所示,步骤230中的基于标定量化系数,对目标代码数据进行更新,包括步骤2307、步骤2309和步骤2311。
[0223]
步骤2307,基于标定量化系数,确定目标网络层对应的第一输入量化系数、第二输入量化系数和输出量化系数。
[0224]
需要说明的是,步骤2307的具体实施方式参照上文中对步骤2301的说明即可,在此不再赘述。
[0225]
步骤2309,基于第一输入量化系数、第二输入量化系数和输出量化系数,确定第五重量化系数。
[0226]
在本公开的一些可选实施方式中,步骤2309,包括:
[0227]
确定第一输入量化系数与第二输入量化系数的第三乘积;
[0228]
基于第三乘积与输出量化系数之间的数值关系,确定第五重量化系数。
[0229]
假设第一输入量化系数表示为scale_lhs,第二输入量化系数表示为scale_rhs,输出量化系数表示为scale_res,则第一输入量化系数与第二输入量化系数的第三乘积可以表示为scale_lhs*scale_rhs。
[0230]
可选地,第三乘积与输出量化系数之间的数值关系可以用第三乘积与输出量化系数的比值进行表示,即可以表示为scale_lhs*scale_rhs/scale_res,这种情况下,可以直接将第三乘积与输出量化系数的比值作为第五重量化系数。假设第五重量化系数表示为rescale,则有:
[0231]
rescale=scale_lhs*scale_rhs/scale_res
[0232]
当然,第三乘积与输出量化系数之间的数值关系也可以用输出量化系数与第三乘积的比值进行表示,这种情况下,可以将输出量化系数与第三乘积的比值的倒数作为第五重量化系数。
[0233]
这种实施方式中,基于定点乘法运算,再通过数值关系的运用,能够高效可靠地确定第五重量化系数。
[0234]
步骤2311,基于第一输入量化系数、第二输入量化系数、输出量化系数和第五重量化系数,对目标代码数据进行更新。
[0235]
在本公开的一些可选实施方式中,通过对目标代码数据进行更新,可以使经更新后的目标代码数据表示的运算规则包括:针对目标网络层的第一浮点输入特征图和第二浮点输入特征图,执行图11所示的步骤1110、步骤1120、步骤1130和步骤1140。
[0236]
步骤1110,利用第一输入量化系数,对第一浮点输入特征图进行量化运算,得到第一定点特征图。
[0237]
需要说明的是,步骤1110的具体实施方式参照上文对步骤610的说明即可,在此不再详细展开。
[0238]
步骤1120,利用第二输入量化系数,对第二浮点输入特征图进行量化运算,得到第二定点特征图。
[0239]
需要说明的是,步骤1120的具体实施方式参照上文中对步骤620的说明即可,在此不再详细展开。
[0240]
步骤1130,基于第五重量化系数,对第一定点特征图和第二定点特征图进行第二类定点运算,得到第十一定点特征图。
[0241]
在本公开的一些可选实施方式中,如图12所示,步骤1130,包括步骤11301和步骤11303。
[0242]
步骤11301,对第一定点特征图和第二定点特征图进行逐元素对应相乘运算,得到第十二定点特征图。
[0243]
需要说明的是,第一定点特征图和第二定点特征图的尺寸可以相同。在步骤11301中,针对第一定点特征图中的每个数值,可以将该数值与第二定点特征图中相应位置的数值进行定点乘法运算,并将乘法运算结果作为第十二定点特征图中相应位置的数值,由此可以得到完整的第十二定点特征图。
[0244]
步骤11303,基于根据第五重量化系数得到的第二转换参考数据,对第十二定点特征图进行第二存储格式转换运算,得到存储格式与第一定点特征图一致的第十一定点特征图。
[0245]
需要说明的是,第十二定点特征图的定点存储格式可以不同于第一定点特征图,例如,第一定点特征图可以呈int8这种定点存储格式,第十二定点特征图可以呈int16这种定点存储格式。这样,在步骤11303中,可以将第十二定点特征图由int16这种定点存储格式转换为int8这种定点存储格式,以得到第十一定点特征图。
[0246]
这种实施方式中,参考第五重量化系数,可以针对第一定点特征图和第二定点特征图,通过逐元素对应相乘运算和存储格式转换运算等运算开销小、逻辑简单的定点运算的执行,高效可靠地得到第十一定点特征图。
[0247]
在本公开的一些可选实施方式中,如图13所示,第二转换参考数据的获得方式可以包括步骤1310、步骤1320、步骤1330、步骤1340。
[0248]
步骤1310,将第五重量化系数分解为第四阶码和第四尾数。
[0249]
步骤1320,确定第四尾数中的高预设位数。
[0250]
步骤1330,确定预设位数与第四阶码的第四差值。
[0251]
需要说明的是,步骤1310至步骤1330的具体实施方式参照上文中对步骤23053至步骤23057的相关介绍即可,在此不再详细展开。
[0252]
由于第五重量化系数表示为rescale,第三尾数中的高预设位数可以表示为extractbits(rescale,8,23),第四差值可以表示为15-extractsignedbits(rescale,23,31)。
[0253]
步骤1340,基于第四尾数中的高预设位数和第四差值,确定第二转换参考数据。
[0254]
在本公开的一些可选实施方式中,第二转换参考数据包括:第四尾数中的高预设位数和第四差值;
[0255]
基于根据第五重量化系数得到的第二转换参考数据,对第十二定点特征图进行第二存储格式转换运算,得到存储格式与第一定点特征图一致的第十一定点特征图,包括:
[0256]
以第四尾数中的高预设位数作为放大系数,对第十二定点特征图进行元素放大运算,得到第十三定点特征图;
[0257]
以第四差值作为移位值,对第十三定点特征图进行第三预设数值区间内的元素向右移位运算,得到第十一定点特征图。
[0258]
可选地,第三预设数值区间可以为-127至127。
[0259]
需要说明的是,此处第十一定点特征图的获得方式参照上文中对第一转换参考数据包括第三尾数中的高预设位数和第三差值的情况下,第三定点特征图的获得方式的介绍即可,在此不再详细展开。
[0260]
假设第十一定点特征图表示为i8result,则i8result可以采用如下公式得到:i8result=clip[i16result*extractbits(rescale,8,23)>>15-extractsignedbits(rescale,23,31),-127,127]
[0261]
其中,i16result表示第十二定点特征图,extractbits(rescale,8,23)表示第四尾数中的高预设位数,i16result*extractbits(rescale,8,23)表示第十三定点特征图,15一extractsignedbits(rescale,23,31)表示第四差值。
[0262]
这样,通过基于五重量化系数确定的第二转换参考数据的运用,能够将第十二定点特征图直接由int16这种定点存储格式转换为int8这种定点存储格式,由此能够高效快捷地得到第十一定点特征图。
[0263]
步骤1140,利用输出量化系数,对第十一定点特征图进行反量化运算,得到目标网络层的浮点输出特征图。
[0264]
需要说明的是,步骤1140的具体实施方式参照上文中对步骤640的介绍即可,在此不再详细展开。
[0265]
采用图11所示实施例,经更新后的目标代码数据表示的运算规则依次包括量化运算、定点运算和反量化运算,可以理解的是,量化运算、定点运算和反量化运算的运算开销均小于浮点运算,这样,通过按照经更新后的目标代码数据表示的运算规则进行运算,能够
以更小的运算开销实现呈浮点存储格式的两路输入(即第一浮点输入特征图与第二浮点输入特征图)之间的逐元素对应相乘运算。
[0266]
下面通过具体的例子,验证本公开的实施例中经更新后的目标代码数据表示的运算规则与浮点逐元素对应运算是等价或者基本等价的。
[0267]
如图14和图15所示,目标网络层的两路输入均可以为2*2的特征图,分别表示为lhs和rhs;其中,lhs中可以包括0.5348、0.1911、0.0784,rhs中可以包括0.3846、0.7731、0.0100。
[0268]
如图14所示,如果直接对lhs和rhs进行浮点逐元素对应相乘运算,则通过将0.5348与0.3846相乘,可以得到0.20568408;通过将0.1911与0.7731相乘,可以得到0.14773941;通过将0.0784与0.0100相乘,可以得到0.000784。如图15所示,如果直接对lhs和rhs进行浮点逐元素对应相加运算,则通过将0.5348与0.3846相加,可以得到0.9194;通过将0.1911与0.7731相加,可以得到0.9642;通过将0.0784与0.0100相加,可以得到0.0884。但是,直接对lhs和rhs进行浮点逐元素对应相乘运算或者浮点逐元素对应相加运算,存在运算开销大的问题。
[0269]
有鉴于此,对于lhs和rhs进行浮点逐元素对应相乘运算的情况,可以对lhs进行标定,得到scale_lhs;对rhs进行标定,得到scale_rhs;对目标网络层的输出进行标定,得到scale_res。这里的标定具体可以采用如下公式:
[0270]
scale_ihs=foat_lhs.max()/127=0.004211023622047245
[0271]
scale_rhs=float_rhs.max()/127=0.00608740157480315
[0272]
scale_res=float_res.max()/127=0.0016195596850393703
[0273]
rescale=scale_hs*scale_rhs/scale_res=0.015827877209576572
[0274]
利用scale_lhs,可以对lhs进行量化运算,以得到int81hs(相当于上文中的第一定点特征图和i8_ihs);利用scale_rhs,可以对rhs进行量化运算,以得到int8rhs(相当于上文中的第二定点特征图和i8_rhs);其中,int8lhs中可以包括127、45、19,int8rhs中可以包括63、127、2。通过将127与63进行相乘,可以得到8001;通过将45与127相乘,可以得到5715;通过将19与2相乘,可以得到38。
[0275]
通过将8001、5715、38代入上文中的i8result=clip[i16result*extractbits(rescale,8,23)>>15-extractsignedbits(rescale,23,31),-127,127]中,可以得到127、90、1。
[0276]
利用scale_res,可以对127、90、1进行反量化运算,以得到0.20568408、0.14576037、0.00161956,很明显,这3个数值与直接进行浮点逐元素对应相乘运算得到的0.20568408、0.14773941、0.000784较为接近,由此可以证明本公开的实施例中经更新后的目标代码数据表示的运算规则与浮点逐元素对应相乘运算可以是基本等价的。
[0277]
对于lhs和rhs进行浮点逐元素对应相加运算的情况,可以对lhs进行标定,得到scale_lhs;对rhs进行标定,得到scale_rhs;对目标网络层的输出进行标定,得到scale_res。这里的标定具体可以采用如下公式:
[0278]
scale_ihs=float_lhs.max()/127=0.004211023622047245
[0279]
scale_rhs=float_rhs.max()/127=0.00608740157480315
[0280]
scale_res=float_res.max()/127=0.007592125984251968
[0281]
利用scale_lhs,可以对lhs进行量化运算,以得到int81hs;利用scale_rhs,可以对rhs进行量化运算,以得到int8rhs;其中,int8lhs中可以包括127、45、19,int8rhs中可以包括63、127、2。
[0282]
另外,还可以进行scale_add(相当于上文中的基准量化系数)的选择。可选地.scale_add可以利用如下公式得到:
[0283]
scale_add=max(scale_lhs.scale_rhs)/2
15
[0284]
这样,可以认为scale_add由scale_lhs或者scale_rhs缩小2的15次方得到。需要说明的是,后续可以将lhs和rhs均统一至scale_add,scale_add只需保证lhs和rhs均能够很好地表达,不会损失精度即可,scale_add的获得方式并不局限于上述公式,例如,scale_add可以为与max(scale_lhs,scale_rhs)/2
15
相差一较小的数值的量化系数。
[0285]
利用如下公式,可以得到scale_lhs、scale_rhs、scale_res各自对应的重量化系数:
[0286]
rescale_lhs=scale_lhs/scale_add
[0287]
rescale_rhs=scale_rhs/scale-add
[0288]
rescale_res=scale_add/scale_res
[0289]
利用如下公式,可以将lhs和rhs均统一至scale_add:
[0290]
i23lhs=i8lhs*rescale_lhs
[0291]
i23rhs=i8rhs*rescale_rhs
[0292]
假设scale_add由scale_rhs缩小2的15次方得到,则i23rhs可以作为上文中的第四定点特征图,i231hs可以作为上文中的第六定点特征图。
[0293]
通过如下公式,可以得到i24result:
[0294]
i24result=i23lhs+i23rhs
[0295]
i24result可以作为上文中的第七定点特征图。
[0296]
之后,可以按照上文中介绍的方式,将第七定点特征图先由int24这种定点存储格式转换为int16这种定点存储格式,再由int16这种定点存储格式转换为int8这种定点存储格式,由此可以得到121、127、12。
[0297]
利用scale_res,可以对121、127、12进行反量化运算,以得到0.91864724、0.96419999、0.09110551这3个数值,这3个数值与直接进行浮点逐元素对应相加运算得到的0.9194、0.9642、0.0884较为接近,由此可以证明本公开的实施例中经更新后的目标代码数据表示的运算规则与浮点逐元素对应相加运算可以是基本等价的。
[0298]
本公开实施例提供的任一种通过编译神经网络模型得到计算机可执行指令的方法可以由任意适当的具有数据处理能力的设备执行,包括但不限于:终端设备和服务器等。或者,本公开实施例提供的任一种通过编译神经网络模型得到计算机可执行指令的方法可以由处理器执行,如处理器通过调用存储器存储的相应指令来执行本公开实施例提及的任一种通过编译神经网络模型得到计算机可执行指令的方法。下文不再赘述。
[0299]
示例性装置
[0300]
图16是本公开一示例性实施例提供的通过编译神经网络模型得到计算机可执行指令的装置的结构示意图。图16所示的装置包括第一确定模块1610、第二确定模块1620、更新模块1630和生成模块1640。
[0301]
第一确定模块1610,用于确定神经网络模型中用于执行浮点逐元素对应运算的目标网络层对应的标定量化系数;
[0302]
第二确定模块1620,用于从用于表示神经网络模型的代码文件中,确定用于表示第一确定模块1610确定的目标网络层的运算规则的目标代码数据;
[0303]
更新模块1630,用于基于第一确定模块1610确定的标定量化系数,对第二确定模块1620确定的目标代码数据进行更新,以使经更新后的目标代码数据表示的运算规则的运算开销小于浮点逐元素对应运算;
[0304]
生成模块1640,用于基于第二确定模块1620确定的目标代码数据经更新后的代码文件,通过编译处理生成神经网络模型对应的计算机可执行指令。
[0305]
在一些可选示例中,如图17所示,更新模块1630,包括:
[0306]
第一确定子模块16301,用于基于第一确定模块1610确定的标定量化系数,确定目标网络层对应的第一输入量化系数、第二输入量化系数和输出量化系数;
[0307]
第二确定子模块16302,用于基于第一确定子模块16301确定的第一输入量化系数和第二输入量化系数,确定基准量化系数;
[0308]
第一更新子模块16303,用于基于第一确定子模块16301确定的第一输入量化系数、第二输入量化系数和输出量化系数,以及第二确定子模块16302确定的基准量化系数,对第二确定模块1620确定的目标代码数据进行更新。
[0309]
在一些可选示例中,第一更新子模块16303,包括:
[0310]
第一确定单元,用于基于第一确定子模块16301确定的第一输入量化系数与第二确定子模块16302确定的基准量化系数之间的数值关系,确定第一重量化系数;
[0311]
第二确定单元,用于基于第一确定子模块16301确定的第二输入量化系数与第二确定子模块16302确定的基准量化系数之间的数值关系,确定第二重量化系数;
[0312]
第三确定单元,用于基于第二确定子模块16302确定的基准量化系数与第一确定子模块16301确定的输出量化系数之间的数值关系,确定第三重量化系数;
[0313]
第一更新单元,用于基于第一确定子模块16301确定的第一输入量化系数、第二输入量化系数和输出量化系数,第二确定子模块16302确定的基准量化系数,第一确定单元确定的第一重量化系数、第二确定单元确定的第二重量化系数,以及第三确定单元确定的第三重量化系数,对第二确定模块1620确定的目标代码数据进行更新。
[0314]
在一些可选示例中,第一更新子模块16303,包括:
[0315]
第四确定单元,用于基于第二确定子模块16302确定的基准量化系数,确定第一确定子模块16301确定的第一输入量化系数对应的第一重量化系数、第一确定子模块16301确定的第二输入量化系数对应的第二重量化系数,以及第一确定子模块16301确定的输出量化系数对应的第三重量化系数;
[0316]
分解单元,用于将第四确定单元确定的第一重量化系数和第二重量化系数中,除了数值较大的目标重量化系数之外的另一重量化系数分解为第一阶码和第一尾数;
[0317]
第五确定单元,用于确定分解单元分解得到的第一尾数中的高预设位数;
[0318]
第六确定单元,用于确定预设位数与分解单元分解得到的第一阶码的第一差值;
[0319]
第二更新单元,用于基于第一确定子模块16301确定的第一输入量化系数、第二输入量化系数和输出量化系数,第二确定子模块16302确定的基准量化系数,目标重量化系
数,第五确定单元确定的第一尾数中的高预设位数,第六确定单元确定的第一差值,以及第四确定单元确定的第三重量化系数,对第二确定模块1620确定的目标代码数据进行更新。
[0320]
在一些可选示例中,经更新后的目标代码数据表示的运算规则包括:针对目标网络层的第一浮点输入特征图和第二浮点输入特征图,通过图18所示的模块执行如下操作:
[0321]
第一运算模块1810,用于利用第一确定子模块16301确定的第一输入量化系数,对第一浮点输入特征图进行量化运算,得到第一定点特征图;
[0322]
第二运算模块1820,用于利用第一确定子模块16301确定的第二输入量化系数,对第二浮点输入特征图进行量化运算,得到第二定点特征图;
[0323]
第三运算模块1830,用于基于第二确定子模块16302确定的基准量化系数,目标重量化系数,第五确定单元确定的第一尾数中的高预设位数、第六确定单元确定的第一差值,以及第四确定单元确定的第三重量化系数,对第一运算模块1810得到的第一定点特征图和第二运算模块1820得到的第二定点特征图进行第一类定点运算,得到第三定点特征图;
[0324]
第四运算模块1840,用于利用第一确定子模块16301确定的输出量化系数,对第三运算模块1830得到的第三定点特征图进行反量化运算,得到目标网络层的浮点输出特征图。
[0325]
在一些可选示例中,如图18所示,第三运算模块1830,包括:
[0326]
第一运算子模块18301,用于以目标重量化系数作为放大系数,对第一运算模块1810得到的第一定点特征图和第二运算模块1820得到的第二定点特征图中,目标重量化系数对应的输入量化系数所对应的目标定点特征图进行元素放大运算,得到第四定点特征图;
[0327]
第二运算子模块18303,用于以第五确定单元确定的第一尾数中的高预设位数作为放大系数,对第一运算模块1810得到的第一定点特征图和第二运算模块1820得到的第二定点特征图中除了目标定点特征图之外的另一定点特征图进行元素放大运算,得到第五定点特征图;
[0328]
第三运算子模块18305,用于以第六确定单元确定的第一差值作为移位值,对第二运算子模块18303得到的第五定点特征图进行元素向右移位运算,得到第六定点特征图;
[0329]
第四运算子模块18307,用于对第一运算子模块18301得到的第四定点特征图和第三运算子模块18305得到的第六定点特征图进行逐元素对应相加运算,得到第七定点特征图;
[0330]
第五运算子模块18309,用于基于根据第四确定单元确定的第三重量化系数得到的第一转换参考数据,对第四运算子模块18307得到的第七定点特征图进行第一存储格式转换运算,得到存储格式与第一运算模块1810得到的第一定点特征图一致的第三定点特征图。
[0331]
在一些可选示例中,如图19所示,第一转换参考数据采用如下模块得到:
[0332]
第五运算模块1910,用于以第一预设值作为底数,以第三预设值作为指数进行幂运算,得到第一运算结果;
[0333]
第三确定模块1920,用于基于第四确定单元确定的第三重量化系数与第五运算模块1910得到的第一运算结果之间的数值关系,确定第二运算结果;
[0334]
第六运算模块1930,用于对第一预设值与第三确定模块1920确定的第二运算结果
的第一乘积进行对数运算,得到第三运算结果;
[0335]
第七运算模块1940,用于对第六运算模块1930得到的第三运算结果进行第一预设数值区间内的向下取整运算,得到第四运算结果;
[0336]
第四确定模块1950,用于基于第一预设值、第四确定单元确定的第三重量化系数、第七运算模块1940得到的第四运算结果,以及预设位数,确定第一转换参考数据。
[0337]
在一些可选示例中,第四确定模块1950,包括:
[0338]
第六运算子模块,用于以第一预设值作为底数,第七运算模块1940得到的第四运算结果作为指数进行幂运算,得到第五运算结果;
[0339]
第三确定子模块,用于基于第四确定单元确定的第三重量化系数与第六运算子模块得到的第五运算结果的第二乘积,确定第四重量化系数;
[0340]
分解子模块,用于将第三确定子模块确定的第四重量化系数分解为第二阶码和第二尾数;
[0341]
第四确定子模块,用于确定分解子模块分解得到的第二尾数中的高预设位数;
[0342]
第五确定子模块,用于确定预设位数与分解子模块分解得到的第二阶码的第二差值;
[0343]
第六确定子模块,用于基于第七运算模块1940得到的第四运算结果、分解子模块分解得到的第二尾数中的高预设位数,以及第五确定子模块确定的第二差值,确定第一转换参考数据。
[0344]
在一些可选示例中,第一转换参考数据包括:第七运算模块1940得到的第四运算结果、分解子模块分解得到的第二尾数中的高预设位数,以及第五确定子模块确定的第二差值;
[0345]
第五运算子模块18309,包括:
[0346]
第一运算单元,用于以第七运算模块1940得到的第四运算结果作为移位值,对第四运算子模块18307得到的第七定点特征图进行第二预设数值区间内的元素向右移位运算,得到第八定点特征图;
[0347]
第二运算单元,用于以分解子模块分解得到的第二尾数中的高预设位数为放大系数,对第一运算单元得到的第八定点特征图进行元素放大运算,得到第九定点特征图;
[0348]
第三运算单元,用于以第五确定子模块确定的第二差值作为移位值,对第二运算单元得到的第九定点特征图进行第三预设数值区间内的元素向右移位运算,得到第三定点特征图。
[0349]
在一些可选示例中,如图20所示,第一转换参考数据采用如下模块得到:
[0350]
第一分解模块2010,用于将第四确定单元确定的第三重量化系数分解为第三阶码和第三尾数;
[0351]
第五确定模块2020,用于确定第一分解模块2010分解得到的第三尾数中的高预设位数;
[0352]
第六确定模块2030,用于确定预设位数与第一分解模块2010分解得到的第三阶码的第三差值;
[0353]
第七确定模块2040,用于基于第一分解模块2010分解得到的第三尾数中的高预设位数和第六确定模块2030确定的第三差值,确定第一转换参考数据。
[0354]
在一些可选示例中,第一转换参考数据包括:第一分解模块2010分解得到的第三尾数中的高预设位数和第六确定模块2030确定的第三差值;
[0355]
第五运算子模块18309,包括:
[0356]
第四运算单元,用于以第一分解模块2010分解得到的第三尾数中的高预设位数作为放大系数,对第四运算子模块18307得到的第七定点特征图进行元素放大运算,得到第十定点特征图;
[0357]
第五运算单元,用于以第六确定模块2030确定的第三差值作为移位值,对第四运算单元得到的第十定点特征图进行第三预设数值区间内的元素向右移位运算,得到第三定点特征图。
[0358]
在一些可选示例中,第二确定子模块16302,包括:
[0359]
第七确定单元,用于确定第一确定子模块16301确定的第一输入量化系数和第二输入量化系数中数值较大的目标输入量化系数;
[0360]
第六运算单元,用于以第一预设值作为底数,以第二预设值作为指数进行幂运算,得到第六运算结果;
[0361]
第八确定单元,用于基于第七确定单元确定的目标输入量化系数与第六运算单元得到的第六运算结果之间的数值关系,确定基准量化系数。
[0362]
在一些可选示例中,如图21所示,更新模块1630,包括:
[0363]
第七确定子模块16304,用于基于第一确定模块1610确定的标定量化系数,确定目标网络层对应的第一输入量化系数、第二输入量化系数和输出量化系数;
[0364]
第八确定子模块16305,用于基于第七确定子模块16304确定的第一输入量化系数、第二输入量化系数和输出量化系数,确定第五重量化系数;
[0365]
第二更新子模块16306,用于基于第七确定子模块16304确定的第一输入量化系数、第二输入量化系数和输出量化系数,以及第八确定子模块16305确定的第五重量化系数,对第二确定模块1620确定的目标代码数据进行更新。
[0366]
在一些可选示例中,经更新后的目标代码数据表示的运算规则包括:针对目标网络层的第一浮点输入特征图和第二浮点输入特征图,通过图22所示的模块执行如下操作:
[0367]
第八运算模块2210,用于利用第七确定子模块16304确定的第一输入量化系数,对第一浮点输入特征图进行量化运算,得到第一定点特征图;
[0368]
第九运算模块2220,用于利用第七确定子模块16304确定的第二输入量化系数,对第二浮点输入特征图进行量化运算,得到第二定点特征图;
[0369]
第十运算模块2230,用于基于第八确定子模块16305确定的第五重量化系数,对第八运算模块2210得到的第一定点特征图和第九运算模块2220得到的第二定点特征图进行第二类定点运算,得到第十一定点特征图;
[0370]
第十一运算模块2240,用于利用第七确定子模块16304确定的输出量化系数,对第十运算模块2230得到的第十一定点特征图进行反量化运算,得到目标网络层的浮点输出特征图。
[0371]
在一些可选示例中,如图22所示,第十运算模块2230,包括:
[0372]
第九确定子模块22301,用于对第八运算模块2210得到的第一定点特征图和第九运算模块2220得到的第二定点特征图进行逐元素对应相乘运算,得到第十二定点特征图;
[0373]
第七运算子模块22303,用于基于根据第八确定子模块16305确定的第五重量化系数得到的第二转换参考数据,对第九确定子模块22301得到的第十二定点特征图进行第二存储格式转换运算,得到存储格式与第八运算模块2210得到的第一定点特征图一致的第十一定点特征图。
[0374]
在一些可选示例中,如图23所示,第二转换参考数据采用如下模块得到:
[0375]
第二分解模块2310,用于将第八确定子模块16305确定的第五重量化系数分解为第四阶码和第四尾数;
[0376]
第八确定模块2320,用于确定第二分解模块2310分解得到的第四尾数中的高预设位数;
[0377]
第九确定模块2330,用于确定预设位数与第二分解模块2310分解得到的第四阶码的第四差值;
[0378]
第十确定模块2340,用于基于第八确定模块2320确定的第四尾数中的高预设位数和第九确定模块2330确定的第四差值,确定第二转换参考数据。
[0379]
在一些可选示例中,第二转换参考数据包括:第二分解模块2310分解得到的第四尾数中的高预设位数和第九确定模块2330确定的第四差值;
[0380]
第七运算子模块22303,包括:
[0381]
第七运算单元,用于以第八确定模块2320确定的第四尾数中的高预设位数作为放大系数,对第九确定子模块22301得到的第十二定点特征图进行元素放大运算,得到第十三定点特征图;
[0382]
第八运算单元,用于以第九确定模块2330确定的第四差值作为移位值,对第七运算单元得到的第十三定点特征图进行元素向右移位运算,得到第十一定点特征图。
[0383]
在一些可选示例中,第八确定子模块16305,包括:
[0384]
第九确定单元,用于确定第七确定子模块16304确定的第一输入量化系数与第二输入量化系数的第三乘积;
[0385]
第十确定单元,用于基于第九确定单元确定的第三乘积与第七确定子模块16304确定的输出量化系数之间的数值关系,确定第五重量化系数。
[0386]
本装置示例性实施例对应的有益技术效果可以参见上述“示例性方法”部分的相应有益技术效果,在此不再赘述。
[0387]
示例性电子设备
[0388]
图24为本公开实施例提供的一种电子设备的结构图,包括至少一个处理器2410和存储器2420。
[0389]
处理器2410可以是中央处理单元(cpu)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备2400中的其他组件以执行期望的功能。
[0390]
存储器2420可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器2410可以运行一个或多个计算机程序指令,以实现上文中本公开的各个实施例的通过编译神经网络模型得到计算机可执行指令的方法和/或其他期望的
功能。
[0391]
在一个示例中,电子设备2400还可以包括:输入装置2430和输出装置2440,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
[0392]
该输入装置2430还可以包括例如键盘、鼠标等等。
[0393]
该输出装置2440可以向外部输出各种信息,其可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
[0394]
当然,为了简化,图24中仅示出了该电子设备2400中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备2400还可以包括任何其他适当的组件。
[0395]
示例性计算机程序产品和计算机可读存储介质
[0396]
除了上述方法和设备以外,本公开的实施例还可以提供一种计算机程序产品,包括计算机程序指令,计算机程序指令在被处理器运行时使得处理器执行上述“示例性方法”部分中描述的本公开各种实施例的通过编译神经网络模型得到计算机可执行指令的方法中的步骤。
[0397]
计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
[0398]
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令在被处理器运行时使得处理器执行上述“示例性方法”部分中描述的本公开各种实施例的通过编译神经网络模型得到计算机可执行指令的方法中的步骤。
[0399]
计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如但不限于包括电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
[0400]
以上结合具体实施例描述了本公开的基本原理,但是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为其是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
[0401]
本领域的技术人员可以对本公开进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。

技术特征:
1.一种通过编译神经网络模型得到计算机可执行指令的方法,包括:确定神经网络模型中用于执行浮点逐元素对应运算的目标网络层对应的标定量化系数;从用于表示所述神经网络模型的代码文件中,确定用于表示所述目标网络层的运算规则的目标代码数据;基于所述标定量化系数,对所述目标代码数据进行更新,以使经更新后的所述目标代码数据表示的运算规则的运算开销小于所述浮点逐元素对应运算;基于所述目标代码数据经更新后的所述代码文件,通过编译处理生成所述神经网络模型对应的计算机可执行指令。2.根据权利要求1所述的方法,其中,所述基于所述标定量化系数,对所述目标代码数据进行更新,包括:基于所述标定量化系数,确定所述目标网络层对应的第一输入量化系数、第二输入量化系数和输出量化系数;基于所述第一输入量化系数和所述第二输入量化系数,确定基准量化系数;基于所述第一输入量化系数、所述第二输入量化系数、所述输出量化系数和所述基准量化系数,对所述目标代码数据进行更新。3.根据权利要求2所述的方法,其中,所述基于所述第一输入量化系数、所述第二输入量化系数、所述输出量化系数和所述基准量化系数,对所述目标代码数据进行更新,包括:基于所述第一输入量化系数与所述基准量化系数之间的数值关系,确定第一重量化系数;基于所述第二输入量化系数与所述基准量化系数之间的数值关系,确定第二重量化系数;基于所述基准量化系数与所述输出量化系数之间的数值关系,确定第三重量化系数;基于所述第一输入量化系数、所述第二输入量化系数、所述输出量化系数、所述基准量化系数、所述第一重量化系数、所述第二重量化系数和所述第三重量化系数,对所述目标代码数据进行更新。4.根据权利要求2所述的方法,其中,所述基于所述第一输入量化系数、所述第二输入量化系数、所述输出量化系数和所述基准量化系数,对所述目标代码数据进行更新,包括:基于所述基准量化系数,确定所述第一输入量化系数对应的第一重量化系数、所述第二输入量化系数对应的第二重量化系数,以及所述输出量化系数对应的第三重量化系数;将所述第一重量化系数和所述第二重量化系数中,除了数值较大的目标重量化系数之外的另一重量化系数分解为第一阶码和第一尾数;确定所述第一尾数中的高预设位数;确定预设位数与所述第一阶码的第一差值;基于所述第一输入量化系数、所述第二输入量化系数、所述输出量化系数、所述基准量化系数、所述目标重量化系数、所述第一尾数中的高预设位数、所述第一差值和所述第三重量化系数,对所述目标代码数据进行更新。5.根据权利要求4所述的方法,其中,经更新后的所述目标代码数据表示的运算规则包括:针对所述目标网络层的第一浮点输入特征图和第二浮点输入特征图,执行如下操作:
利用所述第一输入量化系数,对所述第一浮点输入特征图进行量化运算,得到第一定点特征图;利用所述第二输入量化系数,对所述第二浮点输入特征图进行量化运算,得到第二定点特征图;基于所述基准量化系数、所述目标重量化系数、所述第一尾数中的高预设位数、所述第一差值和所述第三重量化系数,对所述第一定点特征图和所述第二定点特征图进行第一类定点运算,得到第三定点特征图;利用所述输出量化系数,对所述第三定点特征图进行反量化运算,得到所述目标网络层的浮点输出特征图。6.根据权利要求2-5中任一项所述的方法,其中,所述基于所述第一输入量化系数和所述第二输入量化系数,确定基准量化系数,包括:确定所述第一输入量化系数和所述第二输入量化系数中数值较大的目标输入量化系数;以第一预设值作为底数,以第二预设值作为指数进行幂运算,得到第六运算结果;基于所述目标输入量化系数与所述第六运算结果之间的数值关系,确定所述基准量化系数。7.根据权利要求1所述的方法,其中,所述基于所述标定量化系数,对所述目标代码数据进行更新,包括:基于所述标定量化系数,确定所述目标网络层对应的第一输入量化系数、第二输入量化系数和输出量化系数;基于第一输入量化系数、所述第二输入量化系数和所述输出量化系数,确定第五重量化系数;基于所述第一输入量化系数、所述第二输入量化系数、所述输出量化系数和所述第五重量化系数,对所述目标代码数据进行更新。8.根据权利要求7所述的方法,其中,经更新后的所述目标代码数据表示的运算规则包括:针对所述目标网络层的第一浮点输入特征图和第二浮点输入特征图,执行如下操作:利用所述第一输入量化系数,对所述第一浮点输入特征图进行量化运算,得到第一定点特征图;利用所述第二输入量化系数,对所述第二浮点输入特征图进行量化运算,得到第二定点特征图;基于所述第五重量化系数,对所述第一定点特征图和所述第二定点特征图进行第二类定点运算,得到第十一定点特征图;利用所述输出量化系数,对所述第十一定点特征图进行反量化运算,得到所述目标网络层的浮点输出特征图。9.根据权利要求8所述的方法,其中,所述基于所述第五重量化系数,对所述第一定点特征图和所述第二定点特征图进行第二类定点运算,得到第十一定点特征图,包括:对所述第一定点特征图和所述第二定点特征图进行逐元素对应相乘运算,得到第十二定点特征图;基于根据所述第五重量化系数得到的第二转换参考数据,对所述第十二定点特征图进
行第二存储格式转换运算,得到存储格式与所述第一定点特征图一致的所述第十一定点特征图。10.一种通过编译神经网络模型得到计算机可执行指令的装置,包括:第一确定模块,用于确定神经网络模型中用于执行浮点逐元素对应运算的目标网络层对应的标定量化系数;第二确定模块,用于从用于表示所述神经网络模型的代码文件中,确定用于表示所述第一确定模块确定的所述目标网络层的运算规则的目标代码数据;更新模块,用于基于所述第一确定模块确定的所述标定量化系数,对所述第二确定模块确定的所述目标代码数据进行更新,以使经更新后的所述目标代码数据表示的运算规则的运算开销小于所述浮点逐元素对应运算;生成模块,用于基于所述第二确定模块确定的所述目标代码数据经更新后的所述代码文件,通过编译处理生成所述神经网络模型对应的计算机可执行指令。11.一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1-9中任一所述的通过编译神经网络模型得到计算机可执行指令的方法。12.一种电子设备,所述电子设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1-9中任一所述的通过编译神经网络模型得到计算机可执行指令的方法。

技术总结
公开了一种通过编译神经网络模型得到计算机可执行指令的方法,其中,该方法包括:确定神经网络模型中用于执行浮点逐元素对应运算的目标网络层对应的标定量化系数;从用于表示神经网络模型的代码文件中,确定用于表示目标网络层的运算规则的目标代码数据;基于标定量化系数,对目标代码数据进行更新,以使经更新后的目标代码数据表示的运算规则的运算开销小于浮点逐元素对应运算;基于目标代码数据经更新后的代码文件,通过编译处理生成神经网络模型对应的计算机可执行指令。本公开的实施例能够以更小的运算开销实现浮点逐元素对应运算。算。算。


技术研发人员:赵卓然
受保护的技术使用者:北京地平线信息技术有限公司
技术研发日:2023.06.29
技术公布日:2023/9/14
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐