用于神经网络的复合运算单元、方法和电子设备与流程

文档序号:11729870阅读:231来源:国知局
用于神经网络的复合运算单元、方法和电子设备与流程

本申请涉及神经网络计算领域,且更具体地,涉及一种用于神经网络的复合运算单元、方法、电子设备、计算机程序产品和计算机可读写存储介质。



背景技术:

基于神经网络的深度学习技术能够以较高的准确率进行图像识别和检测、语音识别等应用,所以,近两年被业界广泛用于安全监控、辅助驾驶、智能陪伴机器人、智能医疗等领域。面对不同的应用场景,算法工程师们往往需要设计不同的神经网络架构。虽然神经网络架构不同,但最终都需要在某一类型的计算架构上使用一系列的运算来最终实现。因此,如何高效地表示神经网络,并将神经网络中的运算用晶体管高效实现,或者是通过模拟的方式映射到具体计算架构所支持的运算中,是目前业界关注的重点。



技术实现要素:

神经网络的应用都是以基于数据的训练为基础。训练的过程即基于预先设计好的神经网络架构,通过大量的已经标定好的训练集合调整网络中的各个参数,提升网络的准确率,使得调整后的网络能够较为正确执行识别、分类、标记、跟踪等任务。例如,在训练过程中,常常需要将神经网络隐藏层中某一层的输出结果与另一个数据做逐点操作(elementwiseoperation)。

然而,目前的神经网络计算芯片在执行逐点操作时,需要多次的写入、读取存储器的操作,造成计算效率降低,也造成功耗提高。

为了解决上述技术问题,提出了本申请。本申请的实施例提供了一种用于神经网络的复合运算单元、方法、电子设备、计算机程序产品和计算机可读写存储介质,其可以在神经网络中实现复合型运算,通过将多个操作合并成一个操作,减少了对存储器的访问,提高了计算效率并降低了功耗。

根据本申请的一个方面,提供了一种用于神经网络的复合运算单元,包括:乘加模块,用于接收前一层的输出数据和当前层的权重值,并且根据所述当前层的权重值来对所述前一层的输出数据执行乘加运算,以生成乘加运算结果;逐点操作模块,用于接收所述乘加运算结果,根据第一存储器的存储数据来获取特定层的输出数据,所述特定层位于所述当前层之前,并且对所述特定层的输出数据和所述乘加运算结果执行逐点操作,以生成逐点操作结果;以及输出模块,用于将所述逐点操作结果作为当前层的输出数据写入到第二存储器中。

根据本申请的另一方面,提供了一种用于神经网络的复合运算方法,包括:接收前一层的输出数据和当前层的权重值;根据所述当前层的权重值来对所述前一层的输出数据执行乘加运算,以生成乘加运算结果;根据第一存储器的存储数据来获取特定层的输出数据,所述特定层位于所述当前层之前;对所述特定层的输出数据和所述乘加运算结果执行逐点操作,以生成逐点操作结果;以及将所述逐点操作结果作为当前层的输出数据写入到第二存储器中。

根据本申请的另一方面,提供了一种电子设备,包括:处理器;存储器;以及存储在所述存储器中的计算机程序指令,所述计算机程序指令在被所述处理器运行时使得所述处理器执行上述的用于神经网络的复合运算方法。

根据本申请的另一方面,提供了一种计算机程序产品,包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行上述的用于神经网络的复合运算方法。

根据本申请的另一方面,提供了一种计算机可读写存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行上述的用于神经网络的复合运算方法。

与现有技术相比,采用根据本申请实施例的用于神经网络的复合运算单元、方法、电子设备、计算机程序产品和计算机可读写存储介质,可以接收前一层的输出数据和当前层的权重值,根据所述当前层的权重值来对所述前一层的输出数据执行乘加运算,以生成乘加运算结果,根据第一存储器的存储数据来获取先前的特定层的输出数据,对所述特定层的输出数据和所述乘加运算结果执行逐点操作,以生成逐点操作结果,并且将所述逐点操作结果作为当前层的输出数据写入到第二存储器中。因此,可以在神经网络中实现复合型运算,通过将多个操作合并成一个操作,减少了对存储器的访问,提高了计算效率并降低了功耗。

附图说明

通过结合附图对本申请实施例进行更详细的描述,本申请的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与本申请实施例一起用于解释本申请,并不构成对本申请的限制。在附图中,相同的参考标号通常代表相同部件或步骤。

图1图示了根据现有技术的残差网络的逐点操作计算的示意图。

图2图示了根据本申请第一实施例的用于神经网络的复合运算单元的结构示意图。

图3图示了根据本申请第一实施例的残差网络的逐点操作计算的示意图。

图4图示了根据本申请第二实施例的用于神经网络的复合运算单元的结构示意图。

图5图示了根据本申请第二实施例的残差网络的逐点操作计算的示意图。

图6图示了根据本申请实施例的用于神经网络的复合运算方法的流程示意图。

图7图示了根据本申请实施例的电子设备的框图。

具体实施方式

下面,将参考附图详细地描述根据本申请的示例实施例。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是本申请的全部实施例,应理解,本申请不受这里描述的示例实施例的限制。

申请概述

如上所述,目前的神经网络计算芯片在做逐点操作时,需要多次的写入、读取存储器的操作,造成计算效率降低,也造成功耗提高。下面,将在卷积神经网络的具体示例中解释上述技术问题的产生原因。

卷积神经网络是目前非常流行的一种神经网络。目前主流的卷积神经网路都以卷积运算、卷积核的训练为核心,进行网络设计和训练。在卷积神经网络的训练过程中,针对逐层反馈,调整卷积核的相关参数是关键。

残差网络(resnet)是卷积神经网络的一种。在计算机视觉里,特征的“等级”随增网络深度的加深而变高,研究表明,网络的深度是实现好的效果的重要因素。然而,梯度弥散/爆炸成为训练深层次的网络的障碍,导致训练误差增大,收敛变慢甚至无法收敛。加入的后续层如果都能够做到将前一层的结果直接映射到下一层的话,那么该加深后的网络理论上是保持一样的误差而不是增大训练误差。那么,也就说明现有的求解器(solver)在刚构造出来的更深网络上并不能找到更好的解。因此,可以在卷积神经网络中引入残差的概念,让该求解器能够稳定下来更容易收敛。

图1图示了根据现有技术的残差网络的逐点操作计算的示意图。

resnet的计算过程如图1所示,其中f(x)的维度要求与x的维度相同,在第n层与逐点操作之间可以有一层或多层操作(图1中示出了2层),包括但不限于卷积、池化(pooling)、放大(upscaling)、缩放(resize)。

在现有方案中,无论是基于通用处理器(cpu)、专用图形处理器(gpu)、还是专用处理芯片,在处理残差网络(resnet)计算时为了将第n层计算的输出结果x用于与第n+m层(其中,n和m都是正整数)的输出结果f(x)做逐点操作(例如,典型的操作是求和),需要以下几个步骤:

1.将第n层的计算结果保存在存储器的专用存储空间中,并保证该存储空间不被覆盖;

2.计算完第n+m层后,将第n+m层的计算结果保存在存储器中;

3.将第n+m层的计算结果从存储器中读出;

4.将n层的计算结果从存储器中读出;

5.对两者进行逐点操作,并将结果写入存储器中;

6.将第5步的结果从存储器中读出;

7.进行激活函数操作,并将结果存入存储器中。

可以看出,在上面各步操作中,共有7次的写入、读取存储器的操作(4次写入和3次读出),尤其是第2、3两步和第5、6两步均将同一笔数据写入存储器后又立即读出,需要额外的访问存储器的时间,这造成计算效率降低,也造成功耗提高。

通过分析发现,造成上述技术问题的原因在于,在进行一次复合操作的过程中,例如乘加运算(a*b+c),由于目前的可用于神经网络计算的芯片不具备复合型运算单元,因此,在进行一次简单运算后(例如a*b),必须先将结果写入存储器中。

针对该技术问题,本申请的基本构思是提出一种用于神经网络的复合运算单元、方法、电子设备、计算机程序产品和计算机可读写存储介质,其可以在神经网络中实现复合型运算,通过将多个操作合并成一个操作,减少了对存储器的访问,提高了计算效率并降低了功耗。

在介绍了本申请的基本原理之后,下面将参考附图来具体介绍本申请的各种非限制性实施例。

示例性用于神经网络的复合运算单元

图2图示了根据本申请第一实施例的用于神经网络的复合运算单元的结构示意图。

如图2所示,根据本申请第一实施例的用于神经网络的复合运算单元100包括:乘加模块110、逐点操作模块120、和输出模块130。

乘加模块110可以接收前一层的输出数据(也就是当前层的输入数据)和当前层的权重值,并且根据所述当前层的权重值来对所述前一层的输出数据执行乘加运算,以生成乘加运算结果。

例如,除了当前层的权重值之外,乘加模块110还可以引入偏移量。即,乘加模块110可以将当前层的输入向量(即,前一层的输出向量)x中的各个元素通过权重向量ω中对应的权重值缩放后求和,然后还可以再加上偏移量b(在数学上可以看做对输入x做线性的变换)。

逐点操作模块120可以接收所述乘加运算结果,根据第一存储器的存储数据来获取特定层的输出数据,所述特定层位于所述当前层之前,并且对所述特定层的输出数据和所述乘加运算结果执行逐点操作,以生成逐点操作结果。

例如,在第一存储器中存储的所述特定层的输出数据可以是所述特定层的原始输出数据本身,也可以是所述特定层的原始输出数据经过一层或多层运算处理以后产生的运算输出数据,只要保证其维度与所述乘加运算结果的维度相同即可。例如,上述的运算处理可以包括但不限于卷积、池化(pooling)、放大(upscaling)、缩放(resize)等。

例如,希望在当前层中,对先前的特定层的输出数据和当前层中的乘加运算结果执行逐点操作。准备进行逐点操作的两组数据可以包括但不限于:标量、向量、矩阵或者多维数组等。

例如,在第一实施例中,所述逐点操作模块120可以从所述第一存储器直接读取所述特定层的输出数据。该特定层的输出数据是在该特定层的计算结果输出之后保存在存储器的特定存储空间中的,并且需要保证该存储空间不被覆盖,直到该逐点操作完成为止。

典型地,逐点操作模块120所执行的逐点操作可以是求和操作,但是其不限于此。例如,逐点操作可以包括但不限于:加、减、乘、移位、比较等。

接下来,输出模块130可以将所述逐点操作结果作为当前层的输出数据写入到第二存储器中。

例如,取决于系统设计和访问需求,第一存储器和第二存储器可以是片外双倍速率(ddr)存储器、片内静态随机存储器(sram)、片内高速缓冲存储器(cache)、片内寄存器、或者其他非易失型存储器。它们可以是同一块存储单元的同一块区域,也可以是同一块存储单元的不同区域,也可以是不同的存储单元。

如图2所示,在一个实施例中,该复合运算单元100还包括:激活函数模块140,用于在所述输出模块130将所述逐点操作结果写入到所述第二存储器中之前,对所述逐点操作结果施加激活函数处理。

例如,神经网络中激活函数的主要作用是提供网络的非线性建模能力。激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络就具备了分层的非线性映射学习能力。例如,常用的激活函数包括:sigmoid、tanh、relu等。

由此可见,采用根据本申请第一实施例的用于神经网络的复合运算单元,可以接收前一层的输出数据和当前层的权重值,根据所述当前层的权重值来对所述前一层的输出数据执行乘加运算,以生成乘加运算结果,根据第一存储器的存储数据来获取先前的特定层的输出数据,对所述特定层的输出数据和所述乘加运算结果执行逐点操作,以生成逐点操作结果,并且将所述逐点操作结果作为当前层的输出数据写入到第二存储器中。因此,可以在神经网络中实现复合型运算,通过将多个操作合并成一个操作,减少了对存储器的访问,提高了计算效率并降低了功耗。

下面,将在卷积神经网络的具体示例中具体描述根据第一实施例的复合运算单元100的操作。

图3图示了根据本申请第一实施例的残差网络的逐点操作计算的示意图。

在本申请的第一实施例中,复合运算单元100在处理残差网络(resnet)计算时为了将第n层计算的输出结果用于与原第n+m层(其中,n和m都是正整数)的输出结果做逐点操作(例如,典型的操作是求和),需要以下几个步骤:

1.将第n层的输出结果(需要用于后续的逐点操作)(例如,该输出结果可以是一些特征数据)保存在存储器的专用存储空间中,并保证该存储空间不被覆盖;

2.接收第n+m-1层的输出结果,每次计算一个(或者一组)乘加运算结果的同时,将对应位置的第n层输出结果从存储器读出;

3.将第n层输出结果和乘加运算结果进行逐点操作,将逐点操作结果进行可选的(即进行或者不进行)relu操作,并将结果写入存储器。

可以看出,上面通过将第n+m层的乘加计算和逐点操作及可选的relu操作合并成一个操作,减少了对存储器的访问。具体地,通过上述操作,将访问存储器的次数从现有技术中的7次减少到3次(2次写入和1次读出)。因此,充分提高了计算效率并降低了功耗。

并且,在神经网络的实际设计中,整个残差网络(resnet)的卷积操作可以是一个完整的组合逻辑,也可以是多个组合逻辑之间采用流水线操作。

在本申请的第二实施例中,在第一实施例的基础上进一步提出,可以结合低精度量化神经网络的特点,对计算数据引入量化和反量化操作,即可以在访问存储器之前,对计算数据引入量化和反量化的操作,以将高精度输出数据压缩为低精度输出数据,从而减少各个数据在存储器中占用的存储空间,充分提高存取速度。

图4图示了根据本申请第二实施例的用于神经网络的复合运算单元的结构示意图。

如图4所示,与第一实施例中类似地,根据本申请第二实施例的用于神经网络的复合运算单元100包括:乘加模块110、逐点操作模块120、输出模块130、和可选的激活函数模块140。图4与图2的不同之处在于,该用于神经网络的复合运算单元100还包括:反量化模块150和量化模块160。

图4中的乘加模块110、逐点操作模块120、输出模块130、和可选的激活函数模块140与图2中大致相似,在此将省略其重复描述。

在第二实施例中,为了减小存储空间,可以对每一层的输出结果执行量化操作,在将高精度的输出数据转换为低精度的量化数据之后,再保存到存储器中。

例如,所谓量化是指将高精度的输出数据通过一定方式(例如,乘除法、查表、移位)转换成低精度的输出数据,与之相对地,所谓反量化是指将被量化过的低精度的输出数据通过一定方式(例如,乘除法、查表、移位)转换成高精度的输出数据。量化和反量化操作的具体过程将在下文中详细描述。

因此,在引入量化操作的情况下,乘加模块110所接收到的前一层的输出数据可以是前一层的低精度的量化输出数据。然后,所述乘加模块110可以根据所述当前层的权重值来对所述前一层的量化输出数据执行乘加运算,以生成高精度乘加运算结果。

这里,与第一实施例类似地,除了当前层的权重值之外,乘加模块110还可以引入偏移量。

类似地,由于在第二实施例中,在第一存储器中存储的是特定层的低精度的量化输出数据,所以首先需要对量化输出数据执行反量化操作。

为此,反量化模块150可以从所述第一存储器读取所述特定层的低精度的量化输出数据,对所述特定层的量化输出数据执行反量化操作,以生成所述特定层的高精度输出数据,并且将所述特定层的高精度输出数据发送到所述逐点操作模块。

例如,在第一存储器中存储的所述特定层的量化输出数据可以是所述特定层的原始输出数据直接经过量化后所生成的量化输出数据本身,也可以是所述特定层的输出数据经过一层或多层运算处理产生以后的运算输出数据再经过量化后所生成的量化输出数据,只要保证其维度与所述乘加运算结果的维度相同即可。例如,上述的运算处理可以包括但不限于卷积、池化(pooling)、放大(upscaling)、缩放(resize)等。

例如,所述反量化模块150可以对所述特定层的量化输出数据进行移位,以使得移位后的量化输出数据与所述高精度乘加运算结果的小数点对齐,并且根据高精度的位数来对所述移位后的量化输出数据进行符号位扩展。

具体地,所述反量化模块150可以根据所述高精度乘加运算结果中小数点的位置来对所述特定层的量化输出数据进行向左移位。

逐点操作模块120可以从乘加模块110接收所述高精度乘加运算结果,并且从反量化模块150接收所述特定层的高精度输出数据,并且对所述特定层的高精度输出数据和所述高精度乘加运算结果执行逐点操作,以生成高精度逐点操作结果。

接下来,输出模块130可以将所述高精度逐点操作结果作为当前层的输出数据写入到第二存储器中。然而,为了减少计算结果在存储器中占用的存储空间,在存储之前,还可以对高精度逐点操作结果执行量化操作。

为此,量化模块160可以对所述高精度逐点操作结果执行量化操作,以生成所述当前层的量化输出数据,作为低精度逐点操作结果。

例如,所述量化模块160可以对所述高精度逐点操作结果进行带符号移位,并且根据低精度的位数来取移位后的逐点操作结果的低位数值。

具体地,所述量化模块160可以根据量化参数来对所述高精度逐点操作结果进行带符号向右移位,所述量化参数是由所述神经网络的训练过程确定的。

需要说明的是,尽量这里以移位来实现量化和反量化为例进行了说明,但是本申请不限于此。例如,量化和反量化操作还可以通过现有技术中任何可行的方式来实现,例如包括但不限于:乘除法、查表等。

接下来,输出模块130可以将所述低精度逐点操作结果作为当前层的输出数据写入到第二存储器中。

替换地,在将高精度逐点操作结果或者量化后的低精度逐点操作结果写入到第二存储器中之前,激活函数模块140可以对其施加激活函数处理,以引入非线性建模能力。

由此可见,采用根据本申请第二实施例的用于神经网络的复合运算单元,可以接收前一层的低精度的量化输出数据和当前层的权重值,根据所述当前层的权重值来对所述前一层的量化输出数据执行乘加运算,以生成高精度乘加运算结果,将在第一存储器中存储的特定层的低精度的量化输出数据反量化为所述特定层的高精度输出数据,对所述特定层的高精度输出数据和所述高精度乘加运算结果执行逐点操作,以生成高精度逐点操作结果,将高精度逐点操作结果量化为低精度逐点操作结果,并且将所述低精度逐点操作结果作为当前层的输出数据写入到第二存储器中。因此,不但可以在神经网络中实现复合型运算,通过将多个操作合并成一个操作,减少了对存储器的访问,提高了计算效率并降低了功耗,而且可以将计算得到的输出结果进行量化后存储,更进一步减少了存储空间。

下面,将在卷积神经网络的具体示例中具体描述根据第二实施例的复合运算单元100的操作。

图5图示了根据本申请第二实施例的残差网络的逐点操作计算的示意图。

在本申请的第二实施例中,复合运算单元100在处理残差网络(resnet)计算时为了将第n层计算的输出结果用于与原第n+m层(其中,n和m都是正整数)的输出结果做逐点操作(例如,典型的操作是求和),需要以下几个步骤:

1.将第n层的输出结果(需要用于后续的逐点操作)进行量化后保存在存储器的专用存储空间中,即,通过降低输出结果的比特数来达到减少存储空间的目的;

例如,所谓量化是指将高精度的输出数据(例如,32位)通过一定方式(例如,乘除法、查表、移位)转换成低精度的输出数据(例如,8位)。

一种典型的将32位高精度数据量化成8位低精度数据的方式是,将32位高精度数据进行带符号右移k位后再取低8位,得到低精度的8位数据。其中,k是正整数,其值是由神经网络的训练过程决定的。低精度数据的位数是由神经网络的测试结果的优劣决定的,例如,在较少位数无法获得满意的训练结果和/或测试结果时,可以适当增加低精度数据的位数。高精度数据的位数则是由神经网络的结构(例如,乘加器的位数、个数)决定的。

2.接收第n+m-1层的量化输出结果,每次计算一个(或者一组)乘加运算结果的同时,将对应位置的第n层量化输出结果从存储器读出并进行反量化,使其与乘加运算结果小数点对齐;

例如,所谓反量化是指将被量化过的低精度的输出数据(例如,8位)通过一定方式(例如,乘除法、查表、移位)转换成高精度的输出数据(例如,32位)。

一种典型的将被量化过的8位低精度数据反量化为32位高精度数据的方式是,将8位低精度数据左移k'位,使其与乘加运算结果小数点对齐,然后进行符号位扩展成32位数据。

所谓小数点对齐是指通过一定方式(例如,量化、反量化)将两个数的小数点位置对准。例如,高精度数据x=x31…x3x2x1x0,低精度数据y=y7y6…y3y2y1y0,其中x31……x3、x2、x1、x0分别为x的第31~0位,y7……y3、y2、y1、y0分别为y的第7~0位。如果数据x的小数点在x1和x2之间,数据y的小数点在y0和y1之间,那么想要将x和y相加,就需要将y左移1位并补零,得到y'=y7y6…y3y2y1y00,进行符号位扩展后,再将x和y'逐位相加。所谓符号位扩展例如,假设上面y的符号位为y7,则对左移后的y'进行符号位扩展,可以得到y”=y7…y7y6…y3y2y1y00(共24个y7,以使得y”恢复为32位数据)。

3.将反量化后的第n层输出结果和乘加运算结果进行逐点操作;

4.将第3步结果进行可选的量化;

5.对第4步结果进行可选的(即进行或者不进行)relu操作,并将结果写入存储器。

可以看出,上面通过将第n+m层的乘加计算和逐点操作及可选的relu操作合并成一个操作,减少了对存储器的访问。具体地,通过上述操作,将访问存储器的次数从现有技术中的7次减少到3次(2次写入和1次读出)。因此,充分提高了计算效率并降低了功耗。并且,在神经网络的实际设计中,整个残差网络(resnet)的卷积操作可以是一个完整的组合逻辑,也可以是多个组合逻辑之间采用流水线操作。

此外,由于引入了量化和反量化操作,存储空间也有减少,减少的程度则取决于量化后低精度数据的位数。例如,在上述示例应用中,采用8位量化位数,而原始数据是32位数,则对于中间层的存储空间减少为原来的四分之一。

上述过程中所用的量化及反量化参数,均在神经网络的训练过程中计算好,并由指令提供给计算单元。上述操作中第2步到第5步,只需要一条指令即可完成,节省了硬件及时间的开销。

需要说明的是,尽管在上面以残差网络为例示例了根据本申请实施例的复合运算单元,但是,本申请不限于此。除了残差网络外,本申请可应用于任意类型的神经网络中,例如,只要其中存在卷积层输出结果或者全联通层输出结果需要和另一个数据(标量、向量、矩阵或者多维数组)做逐点操作(包括但不限于加、减、乘、移位、比较)的情况即可。

示例性用于神经网络的复合运算方法

图6图示了根据本申请实施例的用于神经网络的复合运算方法的流程示意图。

根据本申请实施例的用于神经网络的复合运算方法可以应用于参考图2到图5所描述的用于神经网络的复合运算单元100。

如图6所示,所述用于神经网络的复合运算方法可以包括:

在步骤s110中,接收前一层的输出数据和当前层的权重值;

在步骤s120中,根据所述当前层的权重值来对所述前一层的输出数据执行乘加运算,以生成乘加运算结果;

在步骤s130中,根据第一存储器的存储数据来获取特定层的输出数据,所述特定层位于所述当前层之前;

在步骤s140中,对所述特定层的输出数据和所述乘加运算结果执行逐点操作,以生成逐点操作结果;以及

在步骤s150中,将所述逐点操作结果作为当前层的输出数据写入到第二存储器中。

在一个实施例中,所述用于神经网络的复合运算方法还可以包括:在将所述逐点操作结果写入到所述第二存储器中之前,对所述逐点操作结果进行激活函数操作。

在一个实施例中,根据第一存储器的存储数据来获取特定层的输出数据可以包括:从所述第一存储器直接读取所述特定层的输出数据。

在一个实施例中,所述前一层的输出数据是所述前一层的低精度的量化输出数据,并且根据所述当前层的权重值来对所述前一层的输出数据执行乘加运算,以生成乘加运算结果可以包括:根据所述当前层的权重值来对所述前一层的量化输出数据执行乘加运算,以生成高精度乘加运算结果。

在一个实施例中,根据第一存储器的存储数据来获取特定层的输出数据可以包括:从所述第一存储器读取所述特定层的低精度的量化输出数据;以及对所述特定层的量化输出数据执行反量化操作,以生成所述特定层的高精度输出数据。

在一个实施例中,对所述特定层的量化输出数据执行反量化操作可以包括:对所述特定层的量化输出数据进行移位,以使得移位后的量化输出数据与所述高精度乘加运算结果的小数点对齐,并且根据高精度的位数来对所述移位后的量化输出数据进行符号位扩展。

在一个实施例中,对所述特定层的量化输出数据进行移位可以包括:根据所述高精度乘加运算结果中小数点的位置来对所述特定层的量化输出数据进行向左移位。

在一个实施例中,对所述特定层的输出数据和所述乘加运算结果执行逐点操作,以生成逐点操作结果可以包括:对所述特定层的高精度输出数据和所述高精度乘加运算结果执行逐点操作,以生成高精度逐点操作结果。

在一个实施例中,所述用于神经网络的复合运算方法还可以包括:对所述高精度逐点操作结果执行量化操作,以生成所述当前层的量化输出数据,作为低精度逐点操作结果。

在一个实施例中,对所述高精度逐点操作结果执行量化操作可以包括:对所述高精度逐点操作结果进行带符号移位,并且根据低精度的位数来取移位后的逐点操作结果的低位数值。

在一个实施例中,对所述高精度逐点操作结果进行带符号移位可以包括:根据量化参数来对所述高精度逐点操作结果进行带符号向右移位,所述量化参数是由所述神经网络的训练过程确定的。

上述用于神经网络的复合运算方法中的各个步骤的具体功能和操作已经在上面参考图2到图5描述的用于神经网络的复合运算单元100中详细介绍,并因此,将省略其重复描述。

示例性电子设备

下面,参考图7来描述根据本申请实施例的电子设备。

图7图示了根据本申请实施例的电子设备的框图。

如图7所示,电子设备10包括一个或多个处理器11和存储器12。

处理器11可以是具有数据处理能力和/或指令执行能力的任何形式的处理单元,并且可以控制电子设备10中的其他组件以执行期望的功能。

存储器12可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读写存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。在所述计算机可读写存储介质上可以存储一个或多个计算机程序指令,处理器11可以运行所述程序指令,以实现上文所述的本申请的各个实施例的用于神经网络的复合运算方法以及/或者其他期望的功能。

在一个示例中,电子设备10还可以包括:输入装置13和输出装置14,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。

例如,该输入装置13可以包括例如键盘、鼠标、以及通信网络及其所连接的远程输入设备等等。

例如,该输出设备14可以包括例如显示器、打印机、以及通信网络及其所连接的远程输出设备等等。

当然,为了简化,图7中仅示出了该电子设备10中与本申请有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。应当注意,图7所示的电子设备10的组件和结构只是示例性的,而非限制性的,根据需要,电子设备10也可以具有其他组件和结构。

示例性计算机程序产品和计算机可读写存储介质

除了上述方法和设备以外,本申请的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的用于神经网络的复合运算方法中的步骤。

所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本申请实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。

此外,本申请的实施例还可以是计算机可读写存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的用于神经网络的复合运算方法中的步骤。

所述计算机可读写存储介质可以采用一个或多个可读写介质的任意组合。可读写介质可以是可读写信号介质或者可读写存储介质。可读写存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读写存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。

本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。

还需要指出的是,在本申请的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。

提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。

为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本申请的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

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