本发明涉及计算机视觉领域,特别涉及一种神经网络优化方法及装置。
背景技术:
近几年来,深度神经网络在计算机视觉领域的各类应用中取得了巨大的成功,如图像分类、目标检测、图像分割等。
但深度神经网络的模型往往包含大量的模型参数,计算量大、处理速度慢,无法在一些低功耗、低计算能力的设备(如嵌入式设备、集成设备等)上进行实时计算。
技术实现要素:
鉴于上述问题,本发明提供一种神经网络优化方法及装置,以解决现有技术神经网络计算速度慢、实时性差的问题。
本发明实施例,一方面提供一种神经网络优化方法,该方法包括:
将卷积层的输入数据沿着通道方向进行二值化和位打包操作,得到压缩输入数据;
将所述卷积层的各卷积核分别沿着通道方向进行二值化和位打包操作得到相应的压缩卷积核;
将所述压缩输入数据按照卷积运算顺序依次划分为与压缩卷积核大小相同的数据块,一次卷积运算包含的输入数据构成一个数据块;
将所述压缩输入数据的每个数据块依次与各压缩卷积核进行卷积运算得到卷积结果,并根据卷积结果得到所述卷积层的多个输出数据。
本发明实施例,另一方面提供一种神经网络优化装置,该装置包括:
第一数据处理单元,用于将卷积层的输入数据沿着通道方向进行二值化和位打包操作,得到压缩输入数据;
第二数据处理单元,用于将所述卷积层的各卷积核分别沿着通道方向进行二值化和位打包操作得到相应的压缩卷积核;
卷积单元,用于将所述压缩输入数据的每个数据块依次与各压缩卷积核进行卷积运算,得到卷积结果;
输出单元,用于根据所述卷积结果得到所述卷积层的多个输出数据。
本发明技术方案带来以下技术效果:
1、在实际应用中,卷积层的输入数据一般为三维数据、卷积核为四维数据,其通道数非常大,若直接采用卷积核对输入数据进行卷积运算其运算量非常大,速度较低。而本发明提供的方案,将卷积层的输入数据和各卷积核分别沿着通道方向进行二值化和位打包操作得到压缩输入数据和压缩卷积核,不仅在通道方向对输入数据和各卷积核进行数据压缩使得参与卷积运算的数据量大大减少,而且输入数据与卷积核的卷积运算由现有技术的浮点数与浮点数相乘变成了无符号整数与无符号整数之间的按位操作,提高了卷积运算速度;且cpu擅长按位操作,因此本发明技术方案优化后的神经网络更加适用于在cpu上实现实时计算;
2、在现有技术中,对输入数据与卷积核进行卷积运算的实现方式一般为,将输入数据和卷积核这两个张量展开为二维矩阵,进行矩阵乘法运算,再将矩阵乘法运算结果重新排布成张量,该现有技术,一方面需要额外分配内存来存储展开的矩阵,增加内存开销,另一方面需要将矩阵乘法运算得到的运算结果重新排布成张量,耗时较长、速度慢。而本发明技术方案,直接将压缩输入数据划分成数据块,将每个数据块与各压缩卷积核进行卷积运算的结果直接按顺序存储到输出张量上,以形成输出数据,无需像现有技术需要增加内存开销存储矩阵和消耗时长对运算结果进行重新排布,因此,采用本发明技术方案既节省内存开销而且还进一步提高运算速度。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
图1为本发明实施例提供的神经网络优化方法的流程图之一;
图2为本发明实施例为输入数据和其对应的压缩输入数据的示意图;
图3为本发明实施例中卷积核和其对应的压缩卷积核的示意图;
图4a为本发明实施例中压缩输入数据的数据块的示意图;
图4b为本发明实施例中通道数据与通道卷积的示意图;
图5为本发明实施例提供的神经网络优化方法的流程图之二;
图6a为本发明实施例为卷积层的输出数据分配存储空间的示意图;
图6b为本发明实施例得到卷积层的输出数据的示意图;
图7为本发明实施例提供的神经网络优化方法的流程图之三;
图8为本发明实施例中全连接层的输入数据和其对应的输入数据序列的示意图;
图9a为本发明实施例中全连接层的网络权重的示意图;
图9b为本发明实施例中转置后的网络权重的示意图;
图9c为本发明实施例中经过二值化处理和位打包操作之后的网络权重;
图10为本发明实施例中神经网络优化装置的结构示意图之一;
图11为本发明实施例中神经网络优化装置的结构示意图之二;
图12为本发明实施例中神经网络优化装置的结构示意图之三。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
实施例一
参见图1,为本发明实施例提供的神经网络优化方法的流程图,本实施例一对神经网络的卷积层进行处理,该方法包括:
步骤101、将卷积层的输入数据沿着通道方向进行二值化和位打包操作,得到压缩输入数据。
卷积层的输入数据一般为三维数据,其包括输入数据的高、宽和通道数,其中输入数据的通道数较多,一般为32的倍数。如图2所示为输入数据和该输入数据对应的压缩输入数据的示意图,用h表示输入数据的高,用w表示输入数据的宽,用c表示输入数据的通道数;压缩输入数据的高、宽不变,但压缩输入数据的通道数变为c/m,其中m为32的整数倍,例如m取值为32、64、128、256等等,本申请不做严格限定。
步骤102、将所述卷积层的各卷积核分别沿着通道方向进行二值化和位打包操作得到相应的压缩卷积核。
卷积层的卷积核一般为四维数据,其包括卷积核的高、宽、通道数和卷积核个数,多个卷积核的高、宽、通道数相同,且各卷积核的通道数与输入数据的通道数相同,一般为32的倍数。如图3为卷积核和该卷积核对应的压缩卷积核的示意图,用h表示卷积核的高,用w表示卷积核的宽,用c表示卷积核的通道数,压缩卷积核的高、宽不变,但压缩卷积核的通道数变为c/m。
步骤103、将所述压缩输入数据按照卷积运算顺序依次划分为与压缩卷积核大小相同的数据块,一次卷积运算包含的输入数据构成一个数据块。
将压缩输入数据分成如图4a所示的数据块。该数据块为三维数据,该数据块的高为h,宽为w,通道数为c/m。
假设压缩输入数据为5*5*6,压缩卷积核为3*3*6,则一个数据块为3*3*6,若卷积步长为1则将该压缩输入数据划分成9个数据块。
步骤104、将所述压缩输入数据的每个数据块依次与各压缩卷积核进行卷积运算得到卷积结果。
步骤105、根据卷积结果得到所述卷积层的多个输出数据。
本发明实施例中,步骤105得到的每个输出数据为一张二维张量。上一层卷积层的卷积核的数量为下一层网络的输入数据的通道数,上一层卷积层的每一个输出数据为下一层网络的一个通道输入数据。
优选地,前述步骤101,具体实现可通过以下步骤a1~步骤a2实现:
步骤a1、将所述卷积层的输入数据沿着通道方向进行二值化处理得到二值化输入数据;
本发明实施例中,可以通过以下公式(1)所示的二值化方法进行二值化处理:
当然,本发明并仅限于前述公式(1)所示的二值化方法进行二值化处理,还可以采用其他二值化方法进行二值化处理,例如,将取值大于等于0的数据二值化为+1,将取值小于0的数据二值化为0。
步骤a2、从二值化输入数据的第一个数据开始,将每m个连续数据打包成一个数据,所述m为32的整数倍。
假设二值化输入数据包含256个数据,m为32,则可将该二值化输入数据打包成8个长度为32位的整型数据。
优选地,前述步骤102,针对所述卷积层的每一个卷积核,通过以下步骤b1~步骤b2实现:
步骤b1、将卷积核沿着通道方向进行二值化得到二值化卷积核;
步骤b2、从二值化卷积核的第一个数据开始,将每m个连续数据打包成一个数据。
优选地,所述步骤104具体实现如下:
对所述压缩输入数据的每个数据块与每个压缩卷积核进行以下卷积运算,该卷积运算包括以下步骤c1~步骤c2:
步骤c1、将所述数据块在每个通道上的通道数据与所述压缩卷积核中相应通道上的通道卷积核进行内积运算,以得到每个通道数据与相应通道卷积核的内积结果;
步骤c2、将所述数据块的各个通道数据与相应通道卷积核的内积结果的和值,确定为所述数据块与所述压缩卷积核的卷积结果。
本发明实施例中,前述通道数据包含多个数据元素,所述卷积核包含多个卷积元素,前述步骤c1中将所述数据块在每个通道上的通道数据与所述压缩卷积核中相应通道上的通道卷积核进行内积运算,具体实现可如下:
针对每个通道数据执行以下步骤d1~步骤d2:
步骤d1、将通道数据中的每个数据元素与相应通道卷积核中的相应卷积元素进行包含一次异或操作和bit-count操作的内积运算,得到各数据元素与相应卷积元素的内积结果;
其中bit-count操作是指统计1的个数。
步骤d2、根据所述通道数据中各数据元素与相应卷积元素的内积结果,得到所述通道数据与相应通道卷积核的内积结果。
根据以下公式(2)计算得到通道数据与相应卷积核的内积结果:
式(2)中,xi·wi为xi与wi的内积结果,xi为为数据块在第i个通道的通道数据,wi为压缩卷积核在第i个通道的通道卷积核,xij为通道数据中的第j个数据元素,wij为wi中的第j个卷积元素,k为通道数据包含的数据元素个数,n为k×m。
如图4b所示为数据块的第i个通道的通道数据以及压缩卷积核中第i个通道的通道卷积核,通道数据和通道卷积核的大小相同,该通道数据与通道卷积核的宽为w,高为h,均包含k(k=w*h)个元素。
在深度神经网络中为防止卷积带来的图像缩减问题,现有技术在将输入数据与卷积核进行卷积时,将输入数据和卷积核这两个张量展开成二维矩阵,并将输入数据展开的二维矩阵中进行边缘补零,由于输入数据展开的二维矩阵比较大,因此内存开销较大,且边缘补零操作需要一定的时延。
优选地,为解决现有技术边缘补零的技术问题,本发明实施例,在前述图1所示的方法流程中,还包括以下步骤100,如图5所示:
步骤100、为所述卷积层的多个输出数据分别分配一个大小为(h’+2n)*(w’+2n)的存储空间,其中h’为输出数据的高,w’为输出数据的宽,n为需要在输出数据周围补零的圈数。
此时,前述步骤105具体实现可如下:将所述压缩输入数据的各数据块与同一个压缩卷积核进行卷积运算得到的卷积结果作为同一个输出数据的元素,分别存储在该输出数据对应的存储空间的中间位置。
如图6a所示,假设卷积层的输出数据为3个,用第一输出数据、第二输出数据和第三输出数据表示,则为该3个输出数据分别分配1个大小为(h’+2n)*(w’+2n)的存储空间,分别用存储空间a、存储空间b和存储空间c表示,且存储空间a、存储空间b和存储空间c中的数据的初始值为0。卷积层包含压缩卷积核a、压缩卷积核b和压缩卷积核c。如图6b所示,压缩输入数据的各数据块与压缩卷积核a进行卷积运算所得到的卷积结果构成第一输出数据,该第一输出数据存储在对应的存储空间a中的中间位置(用x表示的区域);压缩输入数据的各数据块与压缩卷积核b进行卷积运算所得到的卷积结果构成第二输出数据,该第二输出数据存储在对应的存储空间b中的中间位置(用x表示的区域);压缩输入数据的各数据块与压缩卷积核c进行卷积运算所得到的卷积结果构成第三输出数据,该第三输出数据存储在对应的存储空间c的中间位置(用x表示的区域)。由于第一输出数据、第二输出数据和第三输出数据的大小为h*w,则存储空间a、存储空间b和存储空间c的边缘为0,达到了输出数据边缘补零的效果,不需要额外开销内存也不需要进行补零操作,解决了现有技术边缘补零所存在的技术问题。
本发明技术方案带来以下技术效果:
1、在实际应用中,卷积层的输入数据一般为三维数据、卷积核为四维数据,其通道数非常大,若直接采用卷积核对输入数据进行卷积运算其运算量非常大,速度较低。而本发明提供的方案,将卷积层的输入数据和各卷积核分别沿着通道方向进行二值化和位打包操作得到压缩输入数据和压缩卷积核,不仅在通道方向对输入数据和各卷积核进行数据压缩使得参与卷积运算的数据量大大减少,而且输入数据与卷积核的卷积运算由现有技术的浮点数与浮点数相乘变成了无符号整数与无符号整数之间的按位操作,提高了卷积运算速度;且cpu擅长按位操作,因此本发明技术方案优化后的神经网络更加适用于在cpu上实现实时计算;
2、在现有技术中,对输入数据与卷积核进行卷积运算的实现方式一般为,将输入数据和卷积核这两个张量展开为二维矩阵,进行矩阵乘法运算,再将矩阵乘法运算结果重新排布成张量,该现有技术,一方面需要额外分配内存来存储展开的矩阵,增加内存开销,另一方面需要将矩阵乘法运算得到的运算结果重新排布成张量,耗时较长、速度慢。而本发明技术方案,直接将压缩输入数据划分成数据块,将每个数据块与各压缩卷积核进行卷积运算的结果直接按顺序存储到输出张量上,以形成输出数据,无需像现有技术需要增加内存开销存储矩阵和消耗时长对运算结果进行重新排布,因此,采用本发明技术方案既节省内存开销而且还进一步提高运算速度。
优选地,为进一步提高对神经网络的优化效果,以提高神经网络处理效果,在前述实施例一的基础上,还进一步对神经网络中的全连接层进行处理,对全连接层的处理具体可详见实施例二部分的内容。
当神经网络包含卷积层不包含全连接层时,采用实施例一的方式对神经网络中的卷积层进行处理;当神经网络包含全连接层不包含卷积层时,采用实施例二的方式对神经网络中的全连接层进行处理;当神经网络既包含全连接层也包含卷积层时,采用实施例一的方式对神经网络的卷积层进行处理,采用实施例二的方式对神经网络的全连接层进行处理。
实施例二
参见图7,为本发明实施例提供的神经网络优化方法的流程示意图,该方法包括步骤701~步骤709,其中步骤701~步骤705对神经网络中的卷积层进行处理,与图1所示的步骤101~步骤105一一对应,相应的具体实现方式参见实施例一,在此不再赘述。步骤706~步骤709对神经网络中的全连接层进行处理,该步骤706~步骤709与步骤701~步骤705之间的先后顺序没有严格的限定,根据神经网络的结构确定,例如神经网络包含的网络层依次为卷积层a、卷积层b、全连接层c、卷积层d和全连接层e,则按照该神经网络包含的网络层顺序依次对各卷积层采用步骤701~步骤705处理、对各全连接层采用步骤706~步骤708处理。
步骤701、将卷积层的输入数据沿着通道方向进行二值化和位打包操作,得到压缩输入数据。
步骤702、将所述卷积层的各卷积核分别沿着通道方向进行二值化和位打包操作得到相应的压缩卷积核。
步骤703、将所述压缩输入数据按照卷积运算顺序依次划分为与压缩卷积核大小相同的数据块,一次卷积运算包含的输入数据构成一个数据块。
步骤704、将所述压缩输入数据的每个数据块依次与各压缩卷积核进行卷积运算得到卷积结果;
步骤705、根据卷积结果得到所述卷积层的多个输出数据。
步骤706、对全连接层的输入数据进行二值化和位打包操作得到包含多个数据元素的输入数据序列。
步骤707、将所述全连接层的网络权重进行转置,对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列。
步骤708、将输入数据序列中的数据元素分别与各行权重序列的权重元素进行内积运算,得到输入数据序列与各行权重序列的内积结果。
步骤709、根据输入数据序列与各行权重序列的内积结果得到所述全连接层的输出结果。
优选地,本发明实施例中,前述步骤706,具体可通过以下步骤e1~步骤e2实现:
步骤e1、对输入数据进行二值化处理得到二值化输入数据;
步骤e2、从二值化输入数据的第一个数据开始,将每m个连续数据打包成一个数据元素得到包含多个数据元素的输入数据序列,m为32的整数倍。
m的取值可以为32、64、128、256等等,本申请不作严格限定。
如图8所示为全连接层的输入数据、以及该输入数据对应的输入数据序列的示意图,输入数据的长度为n,输入数据序列的长度为n/m。
优选地,前述步骤707中,对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列,具体可通过以下步骤f1~步骤f2实现:
步骤f1、对一行权重进行二值化处理得到一行二值化权重;
步骤f2、从该行二值化权重的第一个权重开始,将每m个连续权重打包成一个权重元素得到包含多个权重元素的权重序列。
如图9a所示为全连接层的网络权重示意图,网络权重包含n行和h列,图9b为转置后的网络权重示意图,图9c为经过二值化处理和位打包操作之后的网络权重。
优选地,前述步骤708具体可通过以下步骤g1~步骤g2实现:
步骤g1、将每一行权重序列的每个权重元素与相应数据元素进行包含一次异或操作和bit-count操作的内积运算,以得到每个权重元素与相应数据元素的内积结果。
步骤g2、根据一行权重序列的各权重元素与相应元素的内积结果,得到输入数据序列与该行权重序列的内积结果。
根据以下公式(3)计算得到输入数据序列与一行权重序列的内积结果:
式(3)中,x·wi为输入数据序列与第i行权重序列的内积结果,x为输入数据序列,wi为第i行权重序列,n为输入数据的数量,xj为输入数据序列中第j个数据元素,wij为第i行权重序列中第j个权重元素。
在计算机程序代码中,针对输入数据序列与一行权重序列,需要进行n/m次乘法和累加运算,若采用循环语句则需要判断n/m次,循环开销较大。
优选地,为节省循环开销,本发明实施例中,针对输入数据序列与一行权重序列,为每一对需要进行卷积运算的数据元素和权重元素配置一个内积运算执行指令,即设置n/m个内积运算执行指令,直接根据该n/m个内积运算执行指令分别对n/m对数据元素和权重元素进行内积运算,无需进行循环判断,节省循环开销。因此,在前述步骤708中还包括以下步骤:
步骤g0、为每行权重序列的每个权重元素配置相应的一个内积运算执行指令;
此时,前述步骤g1具体实现如下:按照权重元素在一行权重序列中的先后顺序,根据权重元素对应的内积运算执行指令对该权重元素与相应数据元素进行包含一次异或操作和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个核的负载量分配相应比例数量的行权重序列。本申请不做严格限定。
本发明实施例二中,在对卷积层进行处理得到的相应技术效果的基础上,还带来以下两个技术效果:一方面,将神经网络的全连接层的输入数据和网络权重进行二值化和位打包操作得到输入数据序列和权重序列,不仅对输入数据和网络权重进行数据压缩使得参与运算的数据量大大减少,而且输入数据与网络权重的运算由现有技术的浮点数与浮点数相乘变成了无符号整数与无符号整数之间的按位操作,提高了运算速度;另一方面,对网络权重进行转置之后的每一行权重处理成一行权重序列,从而使得输入数据序列可以直接按行与网络权重的每一行权重序列依次进行内积运算,从而加快矩阵乘法的数据读取速度,从而进一步提高内积运算速度;再一方面,在将输入数据序列与一行权重序列进行卷积运算时,直接根据各个数据元素的内积运算执行指令进行数据元素与相应权重元素的内积运算,无需循环判断,节省循环开销;最后一方面,通过cpu的多个核并行处理输入数据序列与各行权重序列的内积运算,进一步提高输入数据序列与各行权重序列的内积运算速度和效率。
实施例三
基于前述实施例一、实施例二提供的神经网络优化方法的相同思想,本发明实施例三提供一种神经网络优化装置,该装置的结构示意图如图10所示。
第一数据处理单元11,用于将卷积层的输入数据沿着通道方向进行二值化和位打包操作,得到压缩输入数据;
第二数据处理单元12,用于将所述卷积层的各卷积核分别沿着通道方向进行二值化和位打包操作得到相应的压缩卷积核;
划分单元13,用于将所述压缩输入数据按照卷积运算顺序依次划分为与压缩卷积核大小相同的数据块,一次卷积运算包含的输入数据构成一个数据块;
卷积单元14,用于将所述压缩输入数据的每个数据块依次与各压缩卷积核进行卷积运算,得到卷积结果;
输出单元15,用于根据所述卷积结果得到所述卷积层的多个输出数据。
前述第一数据处理单元11和第二数据处理单元12可通过但不仅限于前述公式(1)所示的二值化方法进行二值化处理,在此不再赘述。
优选地,所述卷积单元14具体用于:对所述压缩输入数据的每个数据块与每个压缩卷积核进行以下卷积运算:
将所述数据块在每个通道上的通道数据与所述压缩卷积核中相应通道上的通道卷积核进行内积运算,以得到每个通道数据与相应通道卷积核的内积结果;
将所述数据块的各个通道数据与相应通道卷积核的内积结果的和值,确定为所述数据块与所述压缩卷积核的卷积结果。
优选地,所述通道数据包含多个数据元素,所述通道卷积核包含多个卷积元素;
所述卷积单元14将所述数据块在每个通道上的通道数据与所述压缩卷积核中相应通道上的通道卷积核进行内积运算,具体包括:
针对每个通道数据执行以下步骤:
将通道数据中的每个数据元素与相应通道卷积核中的相应卷积元素进行包含一次异或操作和bit-count操作的内积运算,得到各数据元素与相应卷积元素的内积结果;
根据所述通道数据中各数据元素与相应卷积元素的内积结果,得到所述通道数据与相应通道卷积核的内积结果。
具体可根据前述公式(2)计算得到通道数据与相应卷积核的内积结果,在此不再赘述。
优选地,所述装置还可进一步包括分配单元16,如图11所示:
分配单元16,用于为所述卷积层的多个输出数据分别分配一个大小为(h’+2n)*(w’+2n)的存储空间,其中h’为输出数据的高,w’为输出数据的宽,n为需要在输出数据周围补零的圈数;
输出单元15具体用于:将所述压缩输入数据的各数据块与同一个压缩卷积核进行卷积运算得到的卷积结果作为同一个输出数据的元素,分别存储在该输出数据对应的存储空间的中间位置。
优选地,所述第一数据处理单元11,具体用于:将所述卷积层的输入数据沿着通道方向进行二值化处理得到二值化输入数据;从二值化输入数据的第一个数据开始,将每m个连续数据打包成一个数据,所述m为32的整数倍;
优选地,所述第二数据处理单元12,具体用于:针对每个卷积核,将所述卷积核沿着通道方向进行二值化得到二值化卷积核;从二值化卷积核的第一个数据开始,将每m个连续数据打包成一个数据。
优选地,如图10、图11所示的装置,还可进一步包括第三数据处理单元17、权重处理单元18、内积运算单元19、结果输出单元20,如图12所示在图10所示的装置中包含前述单元,其中:
第三数据处理单元17,用于对全连接层的输入数据进行二值化和位打包操作得到包含多个数据元素的输入数据序列;
权重处理单元18,用于将所述全连接层的网络权重进行转置,对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列;
内积运算单元19,用于将输入数据序列中的数据元素分别与各行权重序列的权重元素进行内积运算,得到输入数据序列与各行权重序列的内积结果;
结果输出单元20,用于根据输入数据序列与各行权重序列的内积结果得到所述全连接层的输出结果。
优选地,所述内积运算单元19包括:
内积运算模块,用于将每一行权重序列的每个权重元素与相应数据元素进行包含一次异或操作和bit-count操作的内积运算,以得到每个权重元素与相应数据元素的内积结果;
确定模块,用于根据一行权重序列的各权重元素与相应元素的内积结果,得到输入数据序列与该行权重序列的内积结果。
具体可根据前述公式(3)计算得到输入数据序列与一行权重序列的内积结果,在此不再赘述。
优选地,为进一步节省循环开销,所述内积运算单元19还进一步包括:
指令生成模块,用于为每行权重序列的每个权重元素配置相应的一个内积运算执行指令;
内积运算模块具体用于:按照权重元素在一行权重序列中的先后顺序,根据权重元素对应的内积运算执行指令对该权重元素与相应数据元素进行包含一次异或操作和bit-count操作的内积运算。
优选地,所述内积运算单元19,具体用于:将各行权重序列与输入数据序列的内积运算,分布到cpu的多个核上进行并行处理,从所述多个核中得到输入数据序列与各行权重序列的内积结果。
优选地,所述第三数据处理单元17具体用于:对输入数据进行二值化处理得到二值化输入数据;从二值化输入数据的第一个数据开始,将每m个连续数据打包成一个数据元素得到包含多个数据元素的输入数据序列,所述m为32的整数倍。
优选地,所述权重处理单元18对转置后的每一行权重进行二值化和位打包操作得到包含多个权重元素的权重序列,具体包括:对一行权重进行二值化处理得到一行二值化权重;从该行二值化权重的第一个权重开始,将每m个连续权重打包成一个权重元素得到包含多个权重元素的权重序列。
以上是本发明的核心思想,为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。