1.本发明一般地涉及神经网络领域。更具体地,本发明涉及优化神经网络模型中原始维度算子的装置和方法。
背景技术:2.在深度神经网络的领域中,转置算子(transpose)和变形算子(reshape)被广泛的应用在数据重组和适应底层软件栈数据摆放格式。
3.以在gpu上计算为例,具有nchw格式的特征图较具有nhwc格式的特征图更快。为了获得更好的性能,当数据摆放是nhwc时,通常会在对维度排列敏感的算子前置入转置算子,将维度排列转换为nchw,如果再遇到与通道运算相关的算子时,又需要将数据摆放还原再进行运算,显然由于每个算子适合的维度摆放方式不同,导致神经网络模型中频繁置入转置算子以进行格式转换。
4.在处理图像数据的时候,经常遇到输入图像的维数与算子的输入维度不符合的情况,这时需要变形算子来调整输入图像的维度数量。由于每个算子可接受的维度数量不一定相同,导致神经网络模型中频繁置入变形算子以调整维度数量。
5.当神经网络模型中存在许多转置和变形算子时,会使得网络运行时间过长。现有的优化方案只企图优化特定算子前后的转置和变形算子,无法改善位于分支节点、合并节点以及输入/输出端的转置和变形算子。
6.因此,一种优化维度算子的方案是迫切需要的。
技术实现要素:7.为了至少部分地解决背景技术中提到的技术问题,本发明的方案提供了一种优化神经网络模型中原始维度算子的装置和方法。
8.在一个方面中,本发明揭露一种优化神经网络模型中原始维度算子的方法,包括遍历所述神经网络模型,以:识别所述神经网络模型的关键节点;在所述关键节点处置入成对维度算子;结合所述成对维度算子其中之一与所述原始维度算子;以及基于结合后的所述神经网络模型进行推理。
9.在另一个方面,本发明揭露一种优化神经网络模型中原始维度算子的处理装置,包括识别模块、置入模块及结合模块。识别模块用以识别所述神经网络模型的关键节点;置入模块用以在所述关键节点处置入成对维度算子;结合模块用以结合所述成对维度算子其中之一与所述原始维度算子。
10.本发明试着从关键节点减少神经网络中维度算子的数量,并基于结合后的神经网络模型进行推理,以提升网络的运行时间和减少硬件资源的消耗。
附图说明
11.通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目
的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
12.图1a是示出示例性的三维数组;
13.图1b是示出转换后的三维数组;
14.图2是示出变形后的三维矩阵的示意图;
15.图3是示出本发明实施例的处理装置的示意图;
16.图4是示出本发明实施例的待优化的神经网络模型的示意图;
17.图5是示出本发明另一实施例的待优化的神经网络模型的示意图;
18.图6是示出本发明另一实施例的待优化的神经网络模型的示意图;
19.图7是示出本发明另一实施例的待优化的神经网络模型的示意图;以及
20.图8是示出本发明另一实施例优化神经网络模型中原始维度算子的流程图。
具体实施方式
21.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
22.应当理解,本发明的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本发明的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
23.还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本发明。如在本发明说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本发明说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
24.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
25.下面结合附图来详细描述本发明的具体实施方式。
26.随着人工智能技术的发展,在诸如图像处理和模式识别等的任务中,面向的数据往往是多维数组形式。而且,针对多维数组的运算,与维度相关的算子也越来越多,例如转置算子和变形算子等,因此需要提高对应的处理效率。
27.顾名思义,多维数组是包括多个维度的数组。一个多维数组的维度信息可以包括该数组的维度数、各个维度的尺寸等。例如,对于n维数组,可以使用x
n
=(x1,x2,...,x
i
,...,x
n
)来表示其维度信息,其中x
i
(i∈1,2,...,n)表示其中某一个维度的大小。
28.图1示出了示例性的三维数组,或称三维数据块。如图1a所示,该三维数组x具有三个维度,分别是数据块深度方向的维度0(dim0)、数据块高度方向的维度1(dim1)和数据块宽度方向的维度2(dim2)。维度0的尺寸为2,维度1的尺寸为2,维度2的尺寸为3。相应地,按照维度从高到低的顺序,也即从维度0、维度1到维度2的顺序,该三维数组x的维度信息可以
表示为:x3=(2,2,3)。基于图中所示的示例性数据,按照低维度优先的原则,该三维数组x可以表示为:
29.x=[[[1,2,3],[4,5,6]];[[7,8,9],[10,11,12]]]
[0030]
根据某种维度转换规则perm
n
=(p1,p2,
…
,p
i
,...,p
n
),可以得到维度转换后的数据排列,其中p
i
(i∈1,2,...,n)的取值代表数组的原始维度,p
i
在perm
n
中的位置代表转换的目标维度。例如,给定维度转换规则perm3=(0,2,1),表示要将维度1与维度2进行交换,也即原始维度1要转换成新数组的维度2,原始维度2要转换成新数组的维度1。
[0031]
图1b示出了对图1a所示的三维数组x应用上述示例性维度转换规则perm3后得到的转换后的数组y。从图中可以看出,相比于数组x,数组y的维度1和维度2发生了交换。此时,三维数组y的维度信息可以表示为:y3=(2,3,2)。仍然按照低维度优先的原则,三维数组y变为:
[0032]
y=[[[1,4],[2,5],[3,6]];[[7,10],[8,11],[9,12]]]
[0033]
卷积神经网络中的特征图通常使用四维数组来保存,各维度分别为批量大小(n)、特征图高度(h)、特征图宽度(w)与特征图通道(c),由于数据只能线性存储,所以各维度的排列顺序对于神经网络的计算是关键的。现实是,神经网络模型中的许多算子所要求的数据排列方式不一定相同,例如池化算子倾向对nchw排列方式的数据进行计算,而nhwc排列方式却对每个通道同一个像素做计算的算子更加友善,导致在神经网络计算的过程中,数据的排列方式需要经常转换(即转置),换言之,神经网络模型会存在许多转置算子。
[0034]
卷积神经网络中的各算子所能支持的维度数量也经常不一致,在处理特征图总会遇到输入图像维数不符合的情况,此时需要变形算子将特征图的维度进行调整,才能继续计算。变形算子的作用是将张量变换为参数形状的形式,其中参数形状为列表,此列表通过逆序的遍历实现维度的改变。
[0035]
以一维数组变形为二维矩阵为例。假设一维数组为[a
1 a
2 a
3 a
4 a
5 a
6 a
7 a8],该数组中的元素有8个,变形运算利用逆序将数组拆分为[a
1 a
2 a
3 a4]与[a
5 a
6 a
7 a8]两个数组,其中第二个数组调整为第二个维度,也就是将前述1
×
8的数组变形为2
×
4的矩阵,即:
[0036][0037]
同样的一维数组可以再利用变形算子转换为三维,前述1
×
8的数组可以变形为如图2所示的2
×2×
2三维矩阵。
[0038]
另一种变形运算更为直观。假设输入特征图为四维数据,包括批处理(n)、特征图高度(h)、特征图宽度(w)与通道数(c),而某算子的输入格式为三维,变形算子会被置于该算子前,将输入特征图由四维转换为三维,转换方式是直接将h与w相乘,故转换后维度为批处理(n)、特征图大小(h
×
w)与通道数(c)等三维,便可输入至该算子进行运算。
[0039]
本发明针对维度算子进行优化,特别是针对转置和变形算子,在依拓扑排序的神经网络上对其关键节点进行算子配方,再遍历神经网络结构,来优化每个关键节点附近可优化的维度算子,从而尽可能的减少网络中维度算子的数量,达到减少运算时间和降低资源消耗的目的。
[0040]
本发明的一个实施例是一种优化神经网络模型中原始维度算子的处理装置,更详细来说是一种合并或消除神经网络模型中维度算子的处理装置。此实施例的处理装置作为
通用的处理装置,可以是中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。
[0041]
此实施例的处理装置主要针对转置算子或是变形算子进行优化,首先找出神经网络模型的关键节点,在此实施例中,关键节点为输入节点,接着在输入节点处置入成对维度算子,最后将成对维度算子其中之一向下遍历,以结合成对维度算子其中之一与原始维度算子,原始维度算子指的是原本存在神经网络模型中的第一个转置算子或是变形算子。
[0042]
图3示出此实施例的处理装置的示意图,其包括识别模块301、置入模块302、判断模块303、位移模块304与结合模块305。图4示出一种待优化示例性的神经网络模型的示意图,阶段41示出此神经网络模型的片段,包括算子401、算子402、算子403、算子404、算子405,其中算子404为对维度敏感的算子,因此在算子404的前后,即算子403与算子405设置为维度算子,例如此神经网络的输入为nchw格式,但算子404的输入数据需为nhwc格式,因此算子403是把nchw转换成nhwc的转置算子,使得数据格式可以被算子404所接受,在计算完毕后,算子405是把nhwc转换成nchw的转置算子。
[0043]
识别模块301用以识别神经网络模型的输入节点。在阶段41中,识别模块301识别该神经网络模型的输入节点为节点40。
[0044]
置入模块302用以在输入节点处置入成对维度算子,这里的维度算子可以是转置算子或是变形算子,而成对指的是互为反向的维度算子,例如把nchw转换成nhwc的转置算子与把nhwc转换成nchw的转置算子为成对算子,把四维转换成三维的变形算子与把三维转换成四维的变形算子为成对算子。在阶段42中,置入模块302在节点40处置入成对维度算子,即算子406与算子407。
[0045]
接着识别模块301自节点40起往下遍历整个神经网络模型,发现算子403是第一个维度算子,因此设定中间算子群为介于成对维度算子(算子406与算子407)与算子403的算子,即算子401与算子402。在此实施例中,第一个维度算子(算子403)又称为原始维度算子。
[0046]
判断模块303用以判断中间算子群是否对维度敏感,也就是是否依赖特定维度计算,所谓依赖特定维度计算指的是对于输入数据格式的顺序敏感,例如卷积、池化算子是对维度敏感的,而concat、split、reduce(mean、sum、max、min)、argmax、argmin、pad、softmax等算子都属于对维度不敏感的算子。如果判断模块303判断中间算子群对维度不敏感,则继续判断成对维度算子其中之一与原始维度算子是否为成对维度算子,如果是成对维度算子,结合模块305自神经网络模型中移除成对维度算子其中之一与原始维度算子,如果不是成对维度算子,结合模块305合并成对维度算子其中之一与原始维度算子,以形成合并维度算子。
[0047]
更详细来说,判断模块303先判断算子401是否对维度敏感,如果不敏感,表示在算子407位于算子401前或后不影响算子401的计算,如阶段43所示,位移模块304将成对维度算子之一的算子407与算子401互换顺序。
[0048]
同理,如果判断模块303判断算子402仍对维度不敏感,如阶段44所示,位移模块
304再将算子407与算子402互换顺序,使得算子407再下降一层,算子402上升一层。至此,算子407与原始维度算子403成为相邻的算子了。
[0049]
一旦算子407与原始维度算子403成为相邻的算子,结合模块305便可以结合算子407与原始维度算子403。如果算子407与原始维度算子403恰好是成对维度算子,例如一个是把nhwc转换成nchw的转置算子,另一个是把nchw转换成nhwc的转置算子,或一个是三维转换成四维的变形算子,另一个是把四维转换成三维的变形算子。由于成对算子相邻排列对整个运算没有任何帮助,如阶段45所示,结合模块305自神经网络模型中移除算子407与原始维度算子403。
[0050]
如果算子407与原始维度算子403不是成对维度算子,如阶段46所示,结合模块305合并算子407与原始维度算子403,以形成合并维度算子408,例如算子407是三维转换成四维的变形算子,算子403是把四维转换成五维的变形算子,合并维度算子408便是三维转换成五维的变形算子。在生成合并维度算子408后,结合模块305将算子407与原始维度算子403的其中之一替换成合并维度算子408,再移除算子407与原始维度算子403中的另一个,也就是以合并维度算子408代替算子407与原始维度算子403,完成了维度算子的优化任务。
[0051]
如果判断模块303发现中间算子群中有任何中间算子对维度敏感,则结合模块303根据该中间算子的特定维度来转换算子407的维度。举例来说,如果判断模块303判断算子402对维度敏感,则位移模块304不将算子407与算子402互换位置,而改由结合模块305根据前述的维度转换规则,将算子407的输出数据维度转换成算子402的输入数据维度。举例来说,假设算子407是将nhwc转置为nchw,而算子402的输入数据维度为hwnc,则结合模块305将算子407的输出数据维度转换成hwnc,使得算子407的输出数据格式直接可以被算子402所接受。至此,该阶段的优化任务已完成,算子407与原始维度算子403无法合并。
[0052]
在此实施例中,如果原始维度算子能顺利被消除,如阶段45所示,神经网络模型的中段便减少了维度算子,虽然在输入节点40处增加了一个维度算子406,但维度算子406的存在可以视为神经网络模型的输入端的维度改变了。此实施例尽可能的从输入节点出发减少神经网络中段维度算子的数量,并基于结合后的神经网络模型进行推理,以提升网络的运行时间和减少硬件资源的消耗。
[0053]
本发明的另一个实施例是一种优化神经网络模型中原始维度算子的处理装置,与前述实施例不同处在于,实施例的关键节点为输出节点,也就是在神经网络模型的输出节点处置入成对维度算子,将成对维度算子其中之一向上遍历,以结合成对维度算子其中之一与原始维度算子,原始维度算子指的是原本便存在神经网络模型中的转置算子或是变形算子。
[0054]
图5示出一种待优化示例性的神经网络模型的示意图,阶段51示出此神经网络模型的片段,包括算子501、算子502、算子503、算子504、算子505,其中算子504为对维度敏感是算子,因此在算子504的前后,即算子503与算子505设置为维度算子。
[0055]
识别模块301识别神经网络模型的输出节点。在阶段51中,识别模块301识别该神经网络模型的输出节点为节点50。
[0056]
置入模块302用以在输出节点处置入成对维度算子,这里的维度算子可以是转置算子或是变形算子,在阶段52中,置入模块302在节点50处置入成对维度算子,也就是算子506与算子507。
[0057]
接着识别模块301自节点50起向上遍历整个神经网络模型,发现算子503是原始维度算子,中间算子群包括算子501与算子502。
[0058]
判断模块303先判断算子501是否对维度敏感,如果不敏感,表示在算子507位于算子501前或后不影响算子501的计算,如阶段53所示,位移模块304将算子507与算子501互换位置。如果判断模块303判断算子502仍对维度不敏感,如阶段54所示,位移模块304再将算子507与算子502互换位置。至此,算子507与原始维度算子503成为相邻的算子了。
[0059]
结合模块305尝试结合算子507与原始维度算子503。如果算子507与原始维度算子503恰好是成对维度算子,如阶段55所示,结合模块305自神经网络模型中移除算子507与原始维度算子503。如果算子507与原始维度算子503不是成对维度算子,如阶段56所示,结合模块305合并算子507与原始维度算子503,以形成合并维度算子508。在生成合并维度算子508后,结合模块305将算子507与原始维度算子503的其中之一替换成合并维度算子508,再移除算子507与原始维度算子503中的另一个,即以合并维度算子508代替算子507与原始维度算子503,完成了维度算子的优化任务。
[0060]
如果判断模块303发现中间算子群中有任何中间算子对维度敏感,则结合模块303根据该中间算子的特定维度来转换算子507的维度。举例来说,如果判断模块303判断算子502对维度是敏感,则位移模块304不将算子507与算子502互换位置,而改由结合模块305根据前述的维度转换规则,将算子507的输入数据维度转换成算子502的输出数据维度。至此,该阶段的优化任务已完成,算子507与原始维度算子503无法合并。
[0061]
如果原始维度算子能顺利被消除,如阶段55所示,神经网络模型的中段减少了维度算子,虽然在输出节点50处增加了一个维度算子506,但维度算子506的存在可以视为神经网络模型的输出端的维度改变了。此实施例从输出节点出发减少神经网络中段维度算子的数量,并基于结合后的神经网络模型进行推理,以提升网络的运行时间和减少硬件资源的消耗。
[0062]
本发明的另一个实施例是一种优化神经网络模型中原始维度算子的处理装置,与前述实施例不同处在于,此实施例的神经网络模型具有分支结构,而关键节点为分支节点。此实施例在分支节点的前后置入成对维度算子,将成对维度算子其中之一分别向上向下遍历,以结合成对维度算子其中之一与原始维度算子。
[0063]
图6示出一种待优化示例性的神经网络模型的示意图,阶段61示出此神经网络模型的片段,该片段包括一个分支节点60,分支节点60的输入方向上具有算子601、算子602、算子603、算子604、算子605,分支节点60将神经网络模型拆分成2个分支,其中一个分支包括算子606、算子607、算子608、算子609、算子610,另一个分支包括算子611、算子612、算子613、算子614、算子615。算子604、算子609、算子613为对维度敏感的算子,因此在算子604、算子609、算子613的前后,即算子603与算子605、算子608与算子610、算子612与算子614设置为维度算子。
[0064]
识别模块301识别神经网络模型的分支节点。在阶段61中,识别模块301识别该神经网络模块的分支节点为节点60。
[0065]
置入模块302用以在分支节点处置入成对维度算子,在阶段62中,置入模块302在节点60的输入端与输出端分别置入成对维度算子,即算子616与算子617、算子618与算子619、算子620与算子621。
[0066]
识别模块301自节点60起向上遍历整个神经网络模型,发现算子603是原始维度算子,中间算子群包括算子601与算子602;自节点60起向下遍历2个分支,发现算子608与算子612亦是原始维度算子,中间算子群分别包括算子606与算子607,以及算子611。
[0067]
在分支节点60的输入端方向,判断模块303判断中间算子群是否对维度敏感,如果不敏感,位移模块304将算子617与中间算子互换顺序,直到算子617与原始维度算子603成为相邻的算子。结合模块305接着尝试结合算子617与原始维度算子603。如果算子617与原始维度算子603不是成对维度算子,则结合模块305合并算子617与原始维度算子603,以形成合并维度算子。如果判断模块303发现中间算子群中有任何中间算子对维度敏感,则结合模块303根据该中间算子的特定维度来转换算子617的维度。分支节点60的输入端的优化方式与图5的实施例相同,故不赘述。
[0068]
在分支节点60的分支方向,判断模块303分别判断每个分支的中间算子群是否对维度敏感,如果不敏感,位移模块304分别将算子619、算子621与中间算子互换顺序,结合模块305接着分别尝试结合算子619、算子621与原始维度算子608、算子612。每个分支的优化方式与图4的实施例相同,故不赘述。
[0069]
此实施例通过在分支节点的输入端与分支端设置成对维度算子,试着减少神经网络维度算子的数量,并基于结合后的神经网络模型进行推理,以提升网络的运行时间和减少硬件资源的消耗。
[0070]
本发明的另一个实施例是一种优化神经网络模型中原始维度算子的处理装置,与前述实施例不同处在于,实施例的神经网络模型具有合并结构,而关键节点为合并节点。此实施例在合并节点的前后置入成对维度算子,将成对维度算子其中之一分别向上向下遍历,以结合成对维度算子其中之一与原始维度算子。
[0071]
图7示出一种待优化示例性的神经网络模型的示意图,阶段71示出此神经网络模型的片段,该片段包括一个合并节点70,合并节点70的输入方向上为2个分支,其中一个分支包括算子701、算子702、算子703、算子704、算子705,另一个分支包括算子706、算子707、算子708、算子709、算子710,合并节点70的输出端包括算子711、算子712、算子713、算子714、算子715。算子704、算子708、算子714为对维度敏感是算子,因此在算子704、算子708、算子714的前后,即算子703与算子705、算子707与算子709、算子713与算子715设置为维度算子。
[0072]
识别模块301识别神经网络模型的合并节点。在阶段71中,识别模块301识别该神经网络模型的合并节点为节点70。
[0073]
置入模块302在合并节点70的前后置入成对维度算子,在阶段72中,置入模块302在节点70的输入端与输出端分别置入成对维度算子,即算子716与算子717、算子718与算子719、算子720与算子721。
[0074]
识别模块301自节点70起向下遍历整个神经网络模型,发现算子713是原始维度算子,中间算子群包括算子711与算子712;自节点70起向上遍历2个分支,发现算子703与算子707是原始维度算子,中间算子群分别包括算子701与算子702,以及算子706。
[0075]
在合并节点70的输出端方向上,判断模块303判断中间算子群是否对维度敏感,如果不敏感,位移模块304将算子721与中间算子互换顺序,直到算子721与原始维度算子713成为相邻的算子。结合模块305接着尝试结合算子721与原始维度算子713。如果判断模块
303发现中间算子群中有任何中间算子对维度敏感,则结合模块303根据该中间算子的特定维度来转换算子721的维度。合并节点70的输出端的优化方式与图4的实施例相同,故不赘述。
[0076]
在合并节点70的分支方向上,判断模块303分别判断每个分支的中间算子群是否对维度敏感,如果不敏感,位移模块304分别将算子717、算子719与中间算子互换顺序,结合模块305接着分别尝试结合算子717、算子719与原始维度算子703、算子707。每个分支的优化方式与图5的实施例相同,故不赘述。
[0077]
此实施例通过在合并节点的前后设置成对维度算子,试着减少神经网络维度算子的数量,并基于结合后的神经网络模型进行推理,以提升网络的运行时间和减少硬件资源的消耗。
[0078]
本发明的另一个实施例是一种优化神经网络模型中原始维度算子的方法,此实施例遍历神经网络模型,执行如图8所示的流程图。
[0079]
在步骤801中,识别神经网络模型的关键节点,关键节点包括神经网络模型的输入节点、输出节点、分支节点与合并节点。
[0080]
在步骤802中,在关键节点处置入成对维度算子。维度算子可以是转置算子或是变形算子,而成对指的是互为反向的维度算子,例如把nchw转换成nhwc的转置算子与把nhwc转换成nchw的转置算子为成对算子,把四维转换成三维的变形算子与把三维转换成四维的变形算子为成对算子。如果关键节点是输入节点,则在输入节点后置入成对维度算子;如果关键节点是输出节点,则在输出节点前置入成对维度算子;如果关键节点是分支节点或合并节点,则在节点前后均置入成对维度算子。
[0081]
在步骤803中,自关键节点起遍历整个神经网络模型,找寻原始维度算子。如果关键节点是输入节点,则自输入节点往下遍历,找到的第一个维度算子即为原始维度算子;如果关键节点是输出节点,则自输出节点往上遍历,找到的第一个维度算子即为原始维度算子;如果关键节点是分支节点或合并节点,则自节点往上往下遍历,找到的第一个维度算子即为原始维度算子。在成对维度算子与原始维度算子间的所有算子为中间算子,中间算子的集合为中间算子群。
[0082]
接着此实施例开始试着结合成对维度算子其中之一与原始维度算子。
[0083]
在步骤804中,判断中间算子是否对维度敏感,也就是判断中间算子是否依赖特定维度计算,所谓依赖特定维度计算指的是对于输入数据格式的顺序敏感,要求输入数据格式需符合特定排列顺序或维度数量。如否,则执行步骤805,互换成对维度算子之一与中间算子的顺序。
[0084]
继续执行步骤806,判断是否所有中间算子都判断完毕。如否,则需要判断下一个中间算子,因此流程回到步骤804,继续判断下一个中间算子是否对维度敏感。如所有中间算子都判断完毕了,表示成对维度算子之一与原始维度算子相邻了。
[0085]
一旦成对维度算子之一与原始维度算子成为相邻的算子,在步骤807中,判断成对维度算子之一与原始维度算子是否为成对维度算子。如是,在步骤808中,自神经网络模型中移除成对维度算子之一与原始维度算子。
[0086]
如果成对维度算子之一与原始维度算子不是成对维度算子,在步骤809中,合并成对维度算子之一与原始维度算子,以形成合并维度算子。在生成合并维度算子后,将成对维
度算子之一与原始维度算子的其中之一替换成合并维度算子,再移除成对维度算子之一与原始维度算子中的另一个,即以合并维度算子代替成对维度算子之一与原始维度算子,完成了维度算子的优化任务。
[0087]
回到步骤804,如果中间算子对维度敏感,则执行步骤810,根据该中间算子的特定维度来转换成对维度算子之一的维度。
[0088]
最后执行步骤811,基于结合后的神经网络模型进行推理。
[0089]
本发明另一个实施例为一种计算机可读存储介质,其上存储有优化神经网络模型中原始维度算子的计算机程序代码,当所述计算机程序代码由处理器运行时,执行如前所述各实施例的方法。在一些实现场景中,上述集成的单元可以采用软件程序模块的形式来实现。如果以软件程序模块的形式实现并作为独立的产品销售或使用时,所述集成的单元可以存储在计算机可读取存储器中。基于此,当本发明的方案以软件产品(例如计算机可读存储介质)的形式体现时,该软件产品可以存储在存储器中,其可以包括若干指令用以使得计算机设备(例如个人计算机、服务器或者网络设备等)执行本发明实施例所述方法的部分或全部步骤。前述的存储器可以包括但不限于u盘、闪存盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0090]
本发明通过在关键节点处置入成对的维度算子,并遍历整个神经网络,如果原始维度算子能顺利被消除,神经网络模型便减少了维度算子。本发明试着从关键节点出发来减少神经网络中的维度算子的数量,并基于结合后的神经网络模型进行推理,以提升网络的运行时间和减少硬件资源的消耗。
[0091]
根据不同的应用场景,本发明的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本发明的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本发明的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本发明方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0092]
需要说明的是,为了简明的目的,本发明将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本发明的方案并不受所描述的动作的顺序限制。因此,依据本发明的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本发明所描述的实施例可
以视为可选实施例,即其中所涉及的动作或模块对于本发明某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本发明对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本发明某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
[0093]
在具体实现方面,基于本发明的公开和教导,本领域技术人员可以理解本发明所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
[0094]
在本发明中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本发明实施例所述方案的目的。另外,在一些场景中,本发明实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
[0095]
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如中央处理器、gpu、fpga、dsp和asic等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(resistive random access memory,rram)、动态随机存取存储器(dynamic random access memory,dram)、静态随机存取存储器(static random access memory,sram)、增强动态随机存取存储器(enhanced dynamic random access memory,edram)、高带宽存储器(high bandwidth memory,hbm)、混合存储器立方体(hybrid memory cube,hmc)、rom和ram等。
[0096]
以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。