一种神经网络优化方法及装置与流程

文档序号:11200366阅读:529来源:国知局
一种神经网络优化方法及装置与流程

本发明涉及计算机视觉领域,特别涉及一种神经网络优化方法及装置。



背景技术:

近几年来,深度神经网络在计算机视觉领域的各类应用中取得了巨大的成功,如图像分类、目标检测、图像分割等。但深度神经网络的模型往往包含大量的模型参数,计算量大、处理速度慢,无法在一些低功耗、低计算能力的设备(如嵌入式设备、集成设备等)上进行实时计算。



技术实现要素:

鉴于上述问题,本发明提供一种神经网络优化方法及装置,以解决现有技术神经网络处理速度慢、实时性差的问题。。

本发明实施例,一方面提供一种神经网络优化方法,该方法包括:

对全连接层的输入数据进行二值化和位打包操作得到包含多个数据元素的输入数据序列;

将所述全连接层的网络权重进行转置,对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列;

将输入数据序列中的数据元素分别与各行权重序列的权重元素进行内积运算,得到输入数据序列与各行权重序列的内积结果;

根据输入数据序列与各行权重序列的内积结果得到所述全连接层的输出结果。

本发明实施例,另一方面提供一种神经网络优化装置,该装置包括:

数据处理单元,用于对全连接层的输入数据进行二值化和位打包操作得到包含多个数据元素的输入数据序列;

权重处理单元,用于将所述全连接层的网络权重进行转置,对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列;

内积运算单元,用于将输入数据序列中的数据元素分别与各行权重序列的权重元素进行内积运算,得到输入数据序列与各行权重序列的内积结果;

结果输出单元,用于根据输入数据序列与各行权重序列的内积结果得到所述全连接层的输出结果。

本发明技术方案,一方面,将神经网络的全连接层的输入数据和网络权重进行二值化和位打包操作得到输入数据序列和权重序列,不仅对输入数据和网络权重进行数据压缩使得参与运算的数据量大大减少,而且输入数据与网络权重的运算由现有技术的浮点数与浮点数相乘变成了无符号整数与无符号整数之间的按位操作,提高了运算速度;另一方面,对网络权重进行转置之后的每一行权重处理成一行权重序列,从而使得输入数据序列可以直接按行与网络权重的每一行权重序列依次进行内积运算,从而加快矩阵乘法的数据读取速度,从而进一步提高内积运算速度。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。

图1为本发明实施例神经网络优化方法的流程图;

图2为本发明实施例中全连接层的输入数据和其对应的输入数据序列的示意图;

图3a为本发明实施例中全连接层的网络权重的示意图;

图3b为本发明实施例中转置后的网络权重的示意图;

图3c为本发明实施例中经过二值化处理和位打包操作之后的网络权重;

图4为本发明实施例中神经网络优化装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

实施例一

参见图1,为本发明实施例提供的神经网络优化方法的流程图,该方法包括:

步骤101、对全连接层的输入数据进行二值化和位打包操作得到包含多个数据元素的输入数据序列。

步骤102、将所述全连接层的网络权重进行转置,对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列。

步骤103、将输入数据序列中的数据元素分别与各行权重序列的权重元素进行内积运算,得到输入数据序列与各行权重序列的内积结果。

步骤104、根据输入数据序列与各行权重序列的内积结果得到所述全连接层的输出结果。

优选地,本发明实施例中,前述步骤101,具体可通过以下步骤a1~步骤a2实现:

步骤a1、对输入数据进行二值化处理得到二值化输入数据;

步骤a2、从二值化输入数据的第一个数据开始,将每m个连续数据打包成一个数据元素得到包含多个数据元素的输入数据序列,m为32的整数倍。

m的取值可以为32、64、128、256等等,本申请不作严格限定。

如图2所示为全连接层的输入数据、以及该输入数据对应的输入数据序列的示意图,输入数据的长度为n,输入数据序列的长度为n/m。

优选地,前述步骤102中,对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列,具体可通过以下步骤b1~步骤b2实现:

步骤b1、对一行权重进行二值化处理得到一行二值化权重;

步骤b2、从该行二值化权重的第一个权重开始,将每m个连续权重打包成一个权重元素得到包含多个权重元素的权重序列。

如图3a所示为全连接层的网络权重示意图,网络权重包含n行和h列,图3b为转置后的网络权重示意图,图3c为经过二值化处理和位打包操作之后的网络权重。

优选地,前述步骤103具体可通过以下步骤c1~步骤c2实现:

步骤c1、将每一行权重序列的每个权重元素与相应数据元素进行包含一次异或操作和bit-count操作的内积运算,以得到每个权重元素与相应数据元素的内积结果。

步骤c2、根据一行权重序列的各权重元素与相应元素的内积结果,得到输入数据序列与该行权重序列的内积结果。

根据以下公式(1)计算得到输入数据序列与一行权重序列的内积结果:

式(1)中,x·wi为输入数据序列与第i行权重序列的内积结果,x为输入数据序列,wi为第i行权重序列,n为输入数据的数量,xj为输入数据序列中第j个数据元素,wij为第i行权重序列中第j个权重元素。

在计算机程序代码中,针对输入数据序列与一行权重序列,需要进行n/m次乘法和累加运算,若采用循环语句则需要判断n/m次,循环开销较大。

优选地,为节省循环开销,本发明实施例中,针对输入数据序列与一行权重序列,为每一对需要进行卷积运算的数据元素和权重元素配置一个内积运算执行指令,即设置n/m个内积运算执行指令,直接根据该n/m个内积运算执行指令分别对n/m对数据元素和权重元素进行内积运算,无需进行循环判断,节省循环开销。因此,在前述步骤103中还包括以下步骤:

步骤c0、为每行权重序列的每个权重元素配置相应的一个内积运算执行指令;

此时,前述步骤c1具体实现如下:按照权重元素在一行权重序列中的先后顺序,根据权重元素对应的内积运算执行指令对该权重元素与相应数据元素进行包含一次异或操作和bit-count操作的内积运算。

神经网络的全连接层的w维一般是256的整数倍(例如alexnet第一个全连接层中w=4096,vggnet第一个全连接层中w=25088),avx提供的256位长度指令集可进一步加速二值化向量与矩阵的乘法,因此,本发明实施例,可将输入数据和一行权重进行256位打包操作,即每256个连续的数据打包成一个avx支持的256位长度整型数据,用_mm256_xor_si256指令对两个256位长度整型数据进行按位异或操作,再通过4次_mm_popcnt_u64指令累加得到上一步运算结果中1的总个数。

优选地,为进一步提高输入数据序列与各行权重序列的内积运算速度,本发明实施例,将各行权重序列与输入数据序列的内积运算分布到cpu(centralprocessingunit,中央处理器)的多个核上进行并行处理,由cpu的各个核对分配到该核上的输入数据序列和行权重序列进行前述内积运算,并输出内积运算的内积结果。例如,假设行权重序列总共为h个,cpu包含k个核,可以是直接将该h个行权重序列平均分配到k个核上,由该k个核分别依次对其分配得到的h/k个行权重序列与输入数据序列进行内积运算;还可以是根据该k个核的负载量分配相应比例数量的行权重序列。本申请不做严格限定。

实施例二

基于前述实施例一提供的神经网络优化方法的相同构思,本发明实施例二提供一种神经网络优化装置,该装置的结构如图4所示,包括:

数据处理单元41,用于对全连接层的输入数据进行二值化和位打包操作得到包含多个数据元素的输入数据序列;

权重处理单元42,用于将所述全连接层的网络权重进行转置,对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列;

内积运算单元43,用于将输入数据序列中的数据元素分别与各行权重序列的权重元素进行内积运算,得到输入数据序列与各行权重序列的内积结果;

结果输出单元44,用于根据输入数据序列与各行权重序列的内积结果得到所述全连接层的输出结果。

优选地,所述内积运算单元43包括:

内积运算模块,用于将每一行权重序列的每个权重元素与相应数据元素进行包含一次异或操作和bit-count操作的内积运算,以得到每个权重元素与相应数据元素的内积结果;

确定模块,用于根据一行权重序列的各权重元素与相应元素的内积结果,得到输入数据序列与该行权重序列的内积结果。

具体可根据前述公式(1)计算得到输入数据序列与一行权重序列的内积结果,在此不再赘述。

优选地,为进一步节省循环开销,所述内积运算单元43还进一步包括:

指令生成模块,用于为每行权重序列的每个权重元素配置相应的一个内积运算执行指令;

内积运算模块具体用于:按照权重元素在一行权重序列中的先后顺序,根据权重元素对应的内积运算执行指令对该权重元素与相应数据元素进行包含一次异或操作和bit-count操作的内积运算。

优选地,所述内积运算单元43,具体用于:将各行权重序列与输入数据序列的内积运算,分布到cpu的多个核上进行并行处理,从所述多个核中得到输入数据序列与各行权重序列的内积结果。

优选地,所述数据处理单元41具体用于:对输入数据进行二值化处理得到二值化输入数据;从二值化输入数据的第一个数据开始,将每m个连续数据打包成一个数据元素得到包含多个数据元素的输入数据序列,所述m为32的整数倍。

优选地,所述权重处理单元42对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列,具体包括:对一行权重进行二值化处理得到一行二值化权重;从该行二值化权重的第一个权重开始,将每m个连续权重打包成一个权重元素得到包含多个权重元素的权重序列。

本发明技术方案,一方面,将神经网络的全连接层的输入数据和网络权重进行二值化和位打包操作得到输入数据序列和权重序列,不仅对输入数据和网络权重进行数据压缩使得参与运算的数据量大大减少,而且输入数据与网络权重的运算由现有技术的浮点数与浮点数相乘变成了无符号整数与无符号整数之间的按位操作,提高了运算速度;另一方面,对网络权重进行转置之后的每一行权重处理成一行权重序列,从而使得输入数据序列可以直接按行与网络权重的每一行权重序列依次进行内积运算,从而加快矩阵乘法的数据读取速度,从而进一步提高内积运算速度;再一方面,在将输入数据序列与一行权重序列进行卷积运算时,直接根据各个数据元素的内积运算执行指令进行数据元素与相应权重元素的内积运算,无需循环判断,节省循环开销;最后一方面,通过cpu的多个核并行处理输入数据序列与各行权重序列的内积运算,进一步提高输入数据序列与各行权重序列的内积运算速度和效率。

以上是本发明的核心思想,为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1