数据处理系统及方法与流程

文档序号:17988835发布日期:2019-06-22 00:37阅读:168来源:国知局
数据处理系统及方法与流程

本申请涉及神经网络技术,尤其是一种数据处理系统及方法。



背景技术:

诸如卷积神经网络(cnn)的深度计算框架已经用于许多应用领域,包括模式识别、信号处理、时间序列分析等。随着卷积神经网络算法的发展,cnn可用于越来越多的应用场景中。cnn的一些应用场景可对功耗和成本敏感。例如,嵌入式装置的静态随机存取存储器(sram)的容量受限以降低嵌入式装置的成本。

然而,为了保证嵌入式装置的输出精度,可能提供的输入数据(例如,具有高分辨率的图像)的数据量会大于sram的容量。具有通过将操作拆分成多个拆分操作,使得每个拆分操作的数据小于sram的容量,来实现操作的方法及系统将是有益的。



技术实现要素:

提供了数据处理的系统及方法以对数据操作进行拆分,使得每个拆分操作的数据量小于存储器单元(例如,嵌入式装置的片上存储器)的容量。在一些实例中,数据操作的输入数据和输出数据的量可能会大于存储器单元的容量,以保证数据处理的输出精度。所述输入数据和/或所述输出数据必须在外部存储器存储装置中提供,这会降低所述数据处理的计算效率。本申请的系统及方法提供了一种解决方案,对输入数据和输出数据的量超出存储器单元的大小的数据操作进行拆分。每个拆分操作具有不超出存储器单元的输入数据和输出数据的量,使得每个拆分操作的输入数据和输出数据都在所述存储器单元中存储和处理。

本申请的系统及方法可用于改进在顺序执行一系列操作且一个或多个操作的输入数据和输出数据的量超出存储器单元的容量的情形下的数据处理的效率。输入数据和输出数据的量超出存储器单元的容量的操作可以与一个或多个其它操作进行成组,使得成组操作的输入数据和输出数据的量不超出存储器单元的大小。成组操作可以被拆分,每个拆分操作具有小于存储器单元的容量的数据量。每个拆分操作可产生成组操作的处理结果的一部分,且一旦执行了所有的拆分操作就可以得到成组操作的处理结果。

本申请的一个方面提供了一种数据处理方法。该方法可包括:接收待由一系列操作处理的输入数据;从所述一系列操作中识别第一操作,其中所述第一操作的输入数据和输出数据的量超出存储器单元的容量;从所述一系列操作中选择至少一个第二操作以与所述第一操作进行成组,其至少部分地基于所述成组操作的输入数据和输出数据的量和所述存储器单元的容量;以及处理所述成组操作的输入数据的一部分,其中所述输入数据的一部分至少部分地基于所述成组操作的中间数据结果的量来确定。

在一些实施例中,所述一系列操作可包括一系列卷积操作。可替换地,所述一系列操作可包括一系列张量操作。比如,所述一系列操作可包括一系列池化(pooling)、一系列放大(upscaling)或一系列修正线性单元(relus)。在一些实施例中,所述存储器单元可包括静态随机存取存储器(sram)。

在一些实施例中,可基于所述第一操作的输入数据的量和所述第一操作的一个或多个参数来确定所述第一操作的输出数据的量。在一些实施例中,可基于所述成组操作的输入数据的量和所述成组操作的一个或多个参数来确定所述成组操作的输出数据的量。在一些实施例中,所述至少一个第二操作可包括来自所述一系列操作中与所述第一操作紧挨的操作。在一些实例中,所述至少一个第二操作可包括来自所述一系列操作中紧挨在所述第一操作之前的操作。所述至少一个第二操作可包括来自所述一系列操作中紧挨在所述第一操作之后的操作。所述至少一个第二操作可包括来自所述一系列操作中紧挨在所述第一操作之前的操作,以及来自所述一系列操作中紧挨在所述第一操作之后的操作。

在一些实施例中,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作进行成组可包括确定所述成组操作的输入数据和输出数据的量是否超出存储器单元的容量。在一些实例中,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作进行成组可包括递增地增加所述至少一个第二操作中的多个操作的数量,直到所述成组操作的输入数据和输出数据的量不超出存储器单元的容量。比如,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作进行成组可进一步包括将所述成组操作的输出数据存储在外部存储器中。比如,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作进行成组可进一步包括将所述成组操作的输入数据存储在外部存储器中。比如,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作进行成组可进一步包括将所述成组操作的输入数据和输出数据存储在外部存储器中。

在一些实施例中,所述成组操作的输入数据的一部分可包括所述输入数据的n等分中的一个以及边缘数据,n为2或更大的整数。在一些实例中,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作进行成组可包括确定所述至少一个第二操作以使得n的值为最小。所述处理所述成组操作的输入数据的一部分可以执行至少n次。所述成组操作的输入数据的一部分包括所述成组操作的输入数据的另一部分的至少一部分。在一些实例中,n可以至少部分地基于(1)所述成组操作的输入数据和输出数据的量,(2)所述存储器单元的容量,和(3)所述成组操作的中间数据结果的量而确定。

在一些实施例中,所述成组操作的输入数据、中间数据结果和输出数据可存储在所述存储器单元的不同切片(slice)中。

在一些实施例中,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作进行成组可进一步包括将所述成组操作的输出数据存储在外部存储器中。所述处理所述成组操作的输入数据的一部分可包括将所述成组操作的输入数据和中间数据结果存储在存储器单元中。

在一些实施例中,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作进行成组可进一步包括将所述成组操作的输入数据存储在外部存储器中。所述处理所述成组操作的输入数据的一部分可包括从外部存储器接收所述成组操作的输入数据的所述一部分。所述处理所述成组操作的输入数据的一部分可包括将所述成组操作的中间数据结果和输出数据存储在存储器单元中。

在一些实施例中,所述处理所述成组操作的输入数据的一部分可包括将所述成组操作的输入数据、中间数据结果和输出数据存储在存储器单元中。在一些实施例中,该方法进一步可以包括:获得所述成组操作的输出数据的一部分,并对成组操作的输出数据的每一部分进行组合以得到成组操作的输出数据。

本申请的另一方面提供了一种数据处理系统。该系统可包括一个或多个处理器;至少一个存储器单元;以及一个或多个具有存储在其上的指令的存储器,所述指令在由所述一个或多个处理器执行时使所述一个或多个处理器:接收待由一系列操作处理的输入数据;从所述一系列操作中识别第一操作,其中所述第一操作的输入数据和输出数据的量超出所述存储器单元的容量;从所述一系列操作中选择至少一个第二操作以与所述第一操作成组,其至少部分地基于所述成组操作的输入数据和输出数据的量和所述存储器单元的容量;以及处理所述成组操作的输入数据的一部分,其中所述输入数据的所述一部分至少部分地基于所述成组操作的中间数据结果的量来确定。

在一些实施例中,所述一系列操作可包括一系列卷积操作。替代地,所述一系列操作可包括一系列张量操作。比如,所述一系列操作可包括一系列池化、一系列放大或一系列修正线性单元(relus)。在一些实施例中,所述存储器单元可包括静态随机存取存储器(sram)。

在一些实施例中,可基于所述第一操作的输入数据的量和所述第一操作的一个或多个参数来确定所述第一操作的输出数据的量。在一些实施方式中,可基于所述成组操作的输入数据的量和所述成组操作的一个或多个参数来确定所述成组操作的输出数据的量。在一些实施方式中,所述至少一个第二操作可包括来自所述一系列操作中与所述第一操作紧挨的操作。在一些实例中,所述至少一个第二操作可包括来自所述一系列操作中紧挨在所述第一操作之前的操作。所述至少一个第二操作可包括来自所述一系列操作中紧挨在所述第一操作之后的操作。所述至少一个第二操作可包括来自所述一系列操作中紧挨在所述第一操作之前的操作,以及来自所述一系列操作中紧挨在所述第一操作之后的操作。

在一些实施例中,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作成组可包括确定所述成组操作的输入数据和输出数据的量是否超出所述存储器单元的容量。在一些实例中,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作成组可包括递增地增加所述至少一个第二操作中的多个操作的数量,直到所述成组操作的输入数据和输出数据的量不超出所述存储器单元的容量。比如,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作成组可进一步包括将所述成组操作的输出数据存储在外部存储器中。比如,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作成组可进一步包括将所述成组操作的输入数据存储在外部存储器中。比如,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作成组可进一步包括将所述成组操作的输入数据和输出数据存储在外部存储器中。

在一些实施例中,所述成组操作的输入数据的一部分可包括所述输入数据的n等分中的一个以及边缘数据,n为2或更大的整数。在一些实例中,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作成组可包括确定所述至少一个第二操作以使得n的值为最小。所述处理所述成组操作的输入数据的一部分可以执行至少n次。所述成组操作的输入数据的一部分包括所述成组操作的输入数据的另一部分的至少一部分。在一些实例中,n可至少部分地基于(1)所述成组操作的输入数据和输出数据的量,(2)所述存储器单元的容量,和(3)所述成组操作的中间数据结果的量而确定。

在一些实施例中,所述成组操作的输入数据、中间数据结果和输出数据可存储在所述存储器单元的不同切片中。

在一些实施例中,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作成组可进一步包括将所述成组操作的输出数据存储在外部存储器中。所述处理所述成组操作的输入数据的一部分可包括将所述成组操作的输入数据和中间数据结果存储在所述存储器单元中。

在一些实施例中,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与所述第一操作成组可进一步包括将所述成组操作的输入数据存储在外部存储器中。所述处理所述成组操作的输入数据的一部分可包括从所述外部存储器接收所述成组操作的输入数据的一部分。所述处理所述成组操作的输入数据的一部分可包括将所述成组操作的中间数据结果和输出数据存储在所述存储器单元中。

在一些实施例中,所述处理所述成组操作的输入数据的一部分可包括将所述成组操作的输入数据、中间数据结果和输出数据存储在所述存储器单元中。在一些实施例中,一个或多个存储器具有存储在其上的指令,所述指令在由所述一个或多个处理器执行时进一步使所述一个或多个处理器执行:获得所述成组操作的输出数据的一部分,并对所述成组操作的输出数据的每一部分进行组合以得到所述成组操作的输出数据。

本申请的另一个方面提供了包括机器可执行代码的非瞬态计算机可读介质,在通过一个或多个计算机处理器执行时,所述代码实现数据处理的方法。所述非瞬态计算机可读介质可包括:程序指令,用于接收待由一系列操作处理的输入数据;程序指令,用于从所述一系列操作中识别第一操作,其中所述第一操作的输入数据和输出数据的量超出存储器单元的容量;程序指令,用于从所述一系列操作中选择至少一个第二操作以与所述第一操作成组,其至少部分地基于所述成组操作的输入数据和输出数据的量以及所述存储器单元的容量;以及程序指令,用于处理所述成组操作的输入数据的一部分,其中所述输入数据的一部分至少部分地基于所述成组操作的中间数据结果的量来确定。

在一些实施例中,所述一系列操作可包括一系列卷积操作。替代地,所述一系列操作可包括一系列张量操作。比如,所述一系列操作可包括一系列池化、一系列放大或一系列修正线性单元(relus)。在一些实施例中,存储器单元可包括静态随机存取存储器(sram)。

在一些实施例中,可基于所述第一操作的输入数据的量和所述第一操作的一个或多个参数来确定所述第一操作的输出数据的量。在一些实施方式中,可基于所述成组操作的输入数据的量和所述成组操作的一个或多个参数来确定所述成组操作的输出数据的量。在一些实施方式中,所述至少一个第二操作可包括来自所述一系列操作中与所述第一操作紧挨的操作。在一些实例中,所述至少一个第二操作可包括来自所述一系列操作中紧挨在所述第一操作之前的操作。所述至少一个第二操作可包括来自所述一系列操作中紧挨在所述第一操作之后的操作。所述至少一个第二操作可包括来自所述一系列操作中紧挨在所述第一操作之前的操作,以及来自所述一系列操作中紧挨在所述第一操作之后的操作。

在一些实施例中,用于从所述一系列操作中选择至少一个第二操作以与所述第一操作成组的程序指令可包括程序指令以确定所述成组操作的输入数据和输出数据的量是否超出所述存储器单元的容量。在一些实例中,用于从所述一系列操作中选择至少一个第二操作以与所述第一操作成组的程序指令可包括程序指令递增地增加所述至少一个第二操作中的多个操作的数量,直到所述成组操作的输入数据和输出数据的量不超出所述存储器单元的容量。比如,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,用于从所述一系列操作中选择至少一个第二操作以与所述第一操作成组的程序指令可进一步包括程序指令以将所述成组操作的输出数据存储在外部存储器中。比如,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,用于从所述一系列操作中选择至少一个第二操作以与所述第一操作成组的程序指令可进一步包括程序指令以将所述成组操作的输入数据存储在外部存储器中。比如,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,用于从所述一系列操作中选择至少一个第二操作以与所述第一操作成组的程序指令可进一步包括程序指令以将所述成组操作的输入数据和输出数据存储在外部存储器中。

在一些实施例中,所述成组操作的输入数据的一部分可包括所述输入数据的n等分中的一个以及边缘数据,n为2或更大的整数。在一些实例中,用于从所述一系列操作中选择至少一个第二操作以与所述第一操作成组的程序指令可包括程序指令以确定所述至少一个第二操作以使得n的值为最小。用于处理所述成组操作的输入数据的一部分的程序指令可以执行至少n次。所述成组操作的输入数据的一部分包括所述成组操作的输入数据的另一部分的至少一部分。在一些实例中,n可至少部分地基于(1)所述成组操作的输入数据和输出数据的量,(2)所述存储器单元的容量,和(3)所述成组操作的中间数据结果的量而确定。

在一些实施例中,所述成组操作的输入数据、中间数据结果和输出数据可存储在所述存储器单元的不同切片中。

在一些实施例中,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,用于从所述一系列操作中选择至少一个第二操作以与所述第一操作成组的程序指令可进一步包括程序指令以将所述成组操作的输出数据存储在外部存储器中。用于处理所述成组操作的输入数据的一部分的程序指令可包括程序指令以将所述成组操作的输入数据和中间数据结果存储在所述存储器单元中。

在一些实施例中,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)所述成组操作的输入数据和输出数据的量超出所述存储器单元的容量时,用于从所述一系列操作中选择至少一个第二操作以与所述第一操作成组的程序指令可进一步包括程序指令以将所述成组操作的输入数据存储在外部存储器中。用于处理所述成组操作的输入数据的一部分的程序指令可包括程序指令以从所述外部存储器接收所述成组操作的输入数据的一部分。用于处理所述成组操作的输入数据的一部分的程序指令可包括程序指令以将所述成组操作的中间数据结果和输出数据存储在所述存储器单元中。

在一些实施例中,用于处理所述成组操作的输入数据的一部分的程序指令可包括程序指令以将所述成组操作的输入数据、中间数据结果和输出数据存储在所述存储器单元中。在一些实施例中,非瞬态计算机可读介质可进一步包括程序指令用于执行:获得所述成组操作的输出数据的一部分,并对所述成组操作的输出数据的每一部分进行组合以得到所述成组操作的输出数据。

应当理解,本发明的不同方面可以单独地、整体地或彼此组合地进行理解。本文描述的本发明的各个方面可以适用于下文描述的任何特定的应用。

通过下面的详细描述,其中仅通过用于实施本发明的最佳实施例的说明而示出和描述了本发明的示例性实施例,本发明的其它方面和优点对于本领域技术人员来说将变得显而易见。如将认识到的,本发明能够具有其它和不同的实施例,且在不背离本发明的前提下,可以对其一些细节在多个显而易见的方面进行修改。因此,附图和说明书本质上应视为说明性的,而不是限制性的。

附图说明

在所附权利要求中具体阐述了本发明的新颖特征。通过参考以下运用本发明原理的说明性实施例的详细描述,将获得对本发明的特征和优点的更好理解,附图中:

图1示出了包括一个或多个卷积层、一个或多个池化层以及各种其它操作的典型cnn系统。

图2示出了显示一系列数据操作的图。

图3示出了显示一系列数据操作的图,其中每个操作的数据量不超出存储器单元的容量。

图4示出了显示一系列数据操作的图,其中一个操作的数据量超出存储器单元的容量。

图5示出了显示根据本发明实施例的对一个操作与另一操作进行成组的方案图,该操作的数据量超出存储器单元的容量。

图6示出了显示根据本发明实施例的对一个操作与另一操作进行成组的另一方案图,该操作的数据量超出存储器单元的容量。

图7显示了根据本发明实施例的数据操作的示例性方法的流程图。

图8显示了可配置为实现本申请中公开的任何计算系统的计算机系统。

具体实施方式

尽管本文示出和描述了本发明的优选实施例,显然对于本领域技术人员而言,这些实施例仅以示例的方式提供。在不背离本发明的情况下,本领域技术人员将会想到许多改变、变化和替换。应当理解,本文描述的发明实施例的各种替代方案可用于实施本发明。

通过确保任何数据操作的输入数据和输出数据都存储在存储器单元(例如,嵌入式设备的片上存储器)中,提供了数据系统和方法以提高一系列数据操作的效率。这里所公开的系统和方法特别适用于卷积操作中的数据处理,其中输入数据的一部分可被处理以获得输出数据的一部分,以及通过对数据的各自部分进行组合得到整个输出数据。可以从一系列数据操作中识别出其输入数据和输出数据的量超出存储器单元的容量的第一操作。所述第一操作可与一个第二操作进行成组以使得成组操作的总输入数据和输出数据的量不超出存储器单元的容量。至少部分地基于一中间数据结果的量将所述成组操作拆分为多个操作。可依次执行所述多个操作以获得成组操作的输出数据。在一些实施例中,所述一系列数据操作可包括一系列卷积操作。替代地,该一系列操作可包括一系列张量操作,诸如池化操作、放大或relu(修正线性单元)。

相对于现有技术,本文提供的系统及方法可具有成本较低、计算效率提高的优点。例如,即使任何数据操作的输入数据和输出数据的量超出嵌入式装置的片上存储器单元的容量,也可以避免使用外部存储器。本文描述的本发明的各个方面可以适用于下文所述的任何特定应用。该方法和系统可应用于卷积神经网络和其它深度学习应用。应当理解,本发明的不同方面可以单独地、共同地或彼此组合地被理解。

图1示出了典型的cnn系统101(krizhevsky,a.,sutskever,i.,&hinton,g.e.(2012),“利用深度卷积神经网络的imagenet分类”,神经信息处理系统大会,1097-1105页),其包括一个或多个卷积层、一个或多个池化层以及各种其他操作。如图1的a部分所示,cnn系统可包括任意数量的层以及用于不同类型的操作的任意数量的层。卷积神经网络的最简单的架构以一输入层(例如,图像)开始,接着是一序列的卷积层和池化层,并以全连接层结束。在一些情况下,卷积层之后是一relu激活函数层。也可以使用其它激活函数,例如饱和双曲正切(saturatinghyperbolictangent)、恒等(identity)、二元步骤(binarystep)、逻辑(logistic)、arctan、softsign、参数化修正线性单元、指数线性单元、softplus、弯曲恒等(bentidentity)、softexponential、sinusoid、sinc、高斯、sigmoid函数等等。卷积、池化和relu层可以充当可学习特征提取器,全连接层可以作为机器学习分类器。

在一些情况下,卷积层和全连接层可包括参数或权重。这些参数或权重可以在训练阶段中学习。可以利用梯度下降来训练这些参数,使得cnn计算的分类分值与针对每个图像的在训练集中的标签相一致。所述参数可从反向传播神经网络训练过程中获得,使用与生产或应用过程相同的硬件可执行或不可执行所述反向传播神经网络训练过程。

卷积层可包括一个或多个过滤器。当过滤器在输入数据中看到相同的特定结构时,这些过滤器可以激活。在一些情况下,输入数据可以是一幅或多幅图像,且在所述卷积层中,可以将一个或多个过滤器操作应用于所述图像的像素。卷积层可包括在图像空间上滑动的一组可学习过滤器,计算过滤器的参数(entry)与输入图像之间的点积。过滤器操作可以实施为一个核在整个图像上的卷积,如图1的b部分所示。在本申请中,过滤器和核可互换指代。核可包括一个或多个参数。过滤器操作的结果可在通道方向上求和,以提供从卷积层到下一池化层的输出。卷积层可以执行高维卷积。多个过滤器应当延伸到输入图像的全深度。例如,如果我们想要将大小为5x5的过滤器应用于大小为32x32的彩色图像,则过滤器应具有深度3(5x5x3)以覆盖图像的所有三个颜色通道(红色,绿色,蓝色)。

在一些情况下,卷积层可以是深度可分离卷积。在这种情况下,可以将卷积层分解成深度卷积和1x1逐点卷积以合并所述深度卷积的输出。卷积层可以被拆分为用于过滤的层(即,深度卷积层)和用于合并的层(即,逐点卷积层)。在一些情况下,在深度卷积层中,可以将单个过滤器应用于每个输入通道,并且在逐点卷积层中,可以执行1x1卷积以组合所述深度层的输出。在一些情况下,所述深度卷积层和所述逐点卷积层均后随一个激活层。在一些情况下,当基于深度可分离卷积建立cnn时,第一层仍然可以是全卷积。

提供给卷积层的输入数据可为一、二、三、四、五、六、七和更多维。在一些实施例中,提供给诸如卷积层的输入层的输入数据可取决于数据特性。例如,如果输入数据是图像数据,则输入数据可以是三维的。如图1所示,输入数据可以是具有224x224x3的体积大小的图像,其表示三个通道的每个通道为224x224的像素平面。由一个层生成的输出特征图可被用作后续层的输入特征图。用于隐藏层的输入特征图(例如,输入数据)的大小可由包括前面层中的过滤器的数目和一个或多个超参数的若干因素来确定。卷积层在输入特征图上应用过滤器以提取内嵌的视觉特征并生成输出特征图。在一些实施例中,参数的尺寸可以是四维的且输入/输出特征图可以是三维的。例如,每个特征图可以是三维的,其包括具有跨越多个通道的二维平面,且三维特征图通过卷积层中的一组三维过滤器对三维特征图进行处理。在一些情况下,可以具有相加到卷积结果的一维偏置项。例如,给定输入特征图平面的形状在跨c个通道上具有hxh的尺寸(即,宽度和高度),且n个滤波器的每个具有c个通道,过滤器平面尺寸为rxr(即,宽度和高度),卷积层的计算可被定义为:

0≤z<n,0≤u<m,0≤x,y<e,e=(h-r+u)/u

其中o、i、w和b分别表示输出特征图、输入特征图、过滤器和偏置项的矩阵。u表示步长大小。

每个卷积层可包括用于卷积操作的多个参数。在每个卷积层中可以包括一个或多个过滤器。每个过滤器可以包括一个或多个参数或权重。过滤器/核的大小以及过滤器/核的数量可共同确定每个卷积层所需的参数。例如,卷积层可包括四个核,对于三个通道的每个核是2x2平面,由此得到的该层的权重的总数为4x2x2x3。在一些实施例中,参数还可以包括偏置项。

卷积层的输出体积的大小还可以取决于超参数。超参数还可控制卷积层的输出体积的大小。在一些情况下,超参数可以包括深度、步长和零填充。

输出体积的深度控制了层中连接到输入体积的相同区域的神经元的数量。所有这些神经元将学习针对输入中的不同特征而激活。例如,如果第一卷积层以原始图像为输入,则沿着深度维度的不同神经元可以在存在各种定向边缘或颜色斑点的情况下激活。

步长控制了如何分配围绕空间维度(宽度和高度)的深度列。当步长为1时,神经元的新的深度列将以只有一个空间单元间隔的方式分配给各空间位置。这导致在列之间的严重重叠的感受野,且还导致大的输出体积。相反,如果使用更高的步长,则感受野将较小重叠,且所得到的输出体积将在空间上具有较小的尺寸。

有时在输入体积的边界上以零填充输入是方便的。该零填充的大小是另一个超参数。零填充提供了对输出体积空间大小的控制。特别地,有时希望精确地保持输入体积的空间大小。

输出体积的空间大小可以作为输入体积大小w、卷积层神经元的核大小k、它们应用的步长s和零填充的量p的函数来计算。用于计算多少个神经元适配于给定体积的公式由(w-k+2p)/s+1给出。如果上述公式给出的值不是整数,则步长设置不正确,且神经元不能以对称的方式平铺以适配输入体积。大体上,在步长为s=1时设置零填充为p=(k-1)/2可确保输入体积和输出体积在空间上具有相同的大小。在一些情况下,不需要用到前一层的所有神经元。

图1的b部分示出了卷积层的计算。卷积层接收n个特征图作为输入。每个输入特征图由具有kxk的核的移位窗口进行卷积以在一个输出特征图中生成一个像素。所述移位窗口的步长为s,其通常小于k。总共m个输出特征图将形成用于下一个卷积层的输入特征图的集合。

图1的a部分显示了cnn应用。该cnn由八层组成。前五层为卷积层,第6-8层构成全连接的人工神经网络。该算法接收来自原始256x256三通道rgb图像的三个224x224输入图像。输出向量的1000个元素表示1000种类别的可能性。如图1所示,层1接收三个224x224分辨率的输入特征图,和96个55x55分辨率的输出特征图。层1的输出被划分为两组,每个大小为48个特征图。层1的核大小为11x11,且滑动窗口以步长为四个像素在特征图上移位。后面的各层也具有类似的结构。其他层的卷积窗口的滑动步长为一个像素。

可以通过控制前一层中使用的过滤器的数量来控制特征图的数量。输入层中的特征图的数量可对应于通道(例如,r,g,b)的数量。过滤器可以包括一个或多个参数或权重。卷积层可包括多个滤波器。在一些情况下,过滤器的数量和滤波器的大小(即,参数的数量)可以选择为充分利用计算单元或根据硬件的计算能力进行选择。在一些情况下,可以选择过滤器的数量和各过滤器的大小以使得针对可变的输入数据可使用高效的硬件配置。

在一些实施例中,卷积层和/或全连接层可后随激活层,诸如修正线性单元(relu)。relu层可逐个元素应用激活函数,诸如阈值为0的max(0,x)。这可以使输入数据的体积保持不变。也可以使用其它激活函数,例如,饱和双曲正切、恒等、二元步骤、逻辑、arctan、softsign、参数修正线性单元、指数线性单元、softplus、弯曲恒等、softexponential、sinusoid、sinc、高斯、sigmoid函数等等。在一些情况下,当cnn包括深度可分离卷积时,深度可分离卷积和逐点卷积层中的每一层可后随一个relu层。

在如图1的a部分所示的示例中,cnn系统可以包括数个卷积层和池化或子采样层。池化层可以是非线性下采样的形式。池化层可以执行下采样以将给定的特征图减少到缩减特征图的堆栈。所述池化层可以逐渐减少输入数据的空间大小以减少网络中的参数量和计算量,由此还控制过拟合(overfitting)。存在几种函数实现池化,诸如最大池化、平均池化、l2-范数池化。例如,在最大池化操作中,给定的特征图可以被划分为一组非重叠的矩形,对于每个这样的子区域,输出最大值。在另一示例中,在平均池化中,可以输出子区域的平均值。给定的特征图可以以任意尺寸进行划分。例如,可以使用大小为2x2的过滤器在每个深度切片上应用步长为2而进行池化。具有步长为2的大小为2x2的池化层将给定特征图缩减到其原始大小的1/4。

可以将池化层的输出馈送到全连接层以执行图案(pattern)检测。在一些情况下,过滤器可应用到输入特征图上,全连接层可以用于分类的目的。过滤器可以具有与输入特征图相同的大小。全连接层可以在其输入中应用一组权重或参数,并将结果累加作为全连接层的输出。在一些情况下,激活层可以紧接着全连接层之后并输出cnn系统的结果。例如,为了分类目的,输出数据可以是一个保持分类分值的向量。

计算架构可以是预先训练的卷积神经网络。cnn模型可以包括一个或多个卷积层。cnn模型可以包括一个至几百个卷积层。cnn模型可以包括一个或多个池化层。在一些情况下,池化层可以紧接在卷积层之后。在一些实施例中,relu激活操作与卷积操作相结合,使得卷积结果立即由激活函数来处理。在一些实施例中,在数据被送到全连接层之前,卷积和池化层可以多次应用于输入数据。全连接层可以输出最终输出值,对其测试以确定是否已经识别出图案。

提供了一种通过特定设计的集成电路借由改进的处理并行度和存储器访问来加速实现选择算法的系统。所述选择算法,诸如应用cnn,可包括大量的矩阵-矩阵乘法和/或矩阵-向量乘法。所述集成电路可包含存储器单元和计算单元,所述计算单元能够基于减少数量的控制信号来执行并行操作的多次迭代。在一些情况下,数据布置为零和/或以零填充,以使得数据的排列符合预定的硬件配置。该数据可以被设置为基于硬件电路的配置而与预定的数据流或数据路径一致。

在cnn系统中,涉及的数据包括cnn参数和输入/输出特征。如上描述的典型cnn系统可包括多通道卷积层、最大或平均池化层、修正线性单元(relu)、和全连接层。全连接和多通道卷积层都包含大量的数字权重或表示神经元之间的连接强度的参数。待加载到芯片上的集成电路的数据可由主处理器准备并存储在主存储器中,所述数据可以以批量的方式传输至芯片。

cnn的参数可包括用于卷积层的多个参数,包括但不限于权重或参数、偏置、超参数,超参数例如为上文所述的填充、步长和深度。cnn参数还可以包括使用在诸如全连接层等其它类型的层中的参数。

参数可以被布置和分类为多个组。在一些实施例中,参数可以按层来分组。例如,cnn系统的不同层可对应于不同的参数组。每个层的参数可以是大维矩阵。一组参数可以存储在连续的空间中。包含在组中或对应于层的参数可以连续地存储在连续空间中。组中的参数可以根据在cnn的层中执行的功能或操作而部置。

输入数据可包括图像数据或采样语音信号。例如,图像数据可包括多个图像像素值。数据可以是各种数据类型,例如标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点等。

图2示出了显示一系列数据操作2011-2014的框图。在图2所示的示例中,输入数据a可经一系列的数据操作处理得到输出数据e。可以依序执行所述一系列数据操作2011-2014。前一操作的输出数据可用作后续操作的输入数据。例如,输入数据a首先由第一操作2011处理以获得第一中间数据结果b。然后第一中间数据结果b输入给第二操作2012并由第二操作处理得到第二中间数据结果c。第二中间数据结果c然后可由第三操作2013进行处理以得到第三中间数据结果d。之后第三中间数据结果d可由第四操作2014进行处理以得到最终输出数据e。

所述一系列数据操作可以包括一系列的卷积操作或张量操作。张量操作可以包括池化、放大或relu。对于每个类型的操作可以提供一个或多个层。输入数据a可以是图像数据、音频、视频数据以及各种其它数据。例如,典型的cnn系统可包括一个或多个卷积层、一个或多个池化层,以及各种其它操作。cnn系统可包括任意数量的层以及用于不同类型的操作的任意数量的层。前一层的输出数据可以是后续层的输入数据。

图3示出了显示一系列数据操作的图,其中每个操作的数据量不超出处理器单元的容量。图3的左部分显示了一系列操作和数据,图3的右部分显示了在存储器单元中的数据存储。在图3所示的示例中,输入数据a可由一系列数据操作处理以得到输出数据e。所述一系列数据操作可包括依次执行的操作3011至操作3014。前一操作的输出数据可作为后续操作的输入数据。

存储器单元3000可以是任何合适的ram,包括静态随机存取存储器(sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(sdram)、双倍数据速率(ddr)、双倍数据速率同步动态随机存取存储器(ddrsdram)、ddr、ddr2、ddr3、t-ram、z-ram等。在一些情况下,所述存储器单元可以是嵌入式设备的片上存储器。

在一些实施例中,在执行一个操作中,所述操作的整个输入数据和整个输出数据操作可以存储在同一存储器中。如本文上面讨论,一个操作的输出数据的大小可以至少部分基于输入数据的大小和操作的若干因素(例如,参数)。比如,卷积操作(例如,卷积层)的输出数据的大小可基于超参数,诸如卷积的深度、步长和零填充。在示例性示例中,可以在输入数据a可用时确定操作3011的输出数据b的大小,且可在存储器单元中预留用于输出数据b的存储空间。用于输出数据b的存储空间可以是连续的,或者例如在存储器单元中,输出数据b可以存储在具有连续存储地址的存储空间中。用于输出数据b的存储空间可选地在存储器单元中为不连续的,例如,输出数据b可以作为多个数据部分存储在存储器单元中。

如图3所示,在执行操作3011之前,输入数据a可以存储在存储器单元3000中作为待处理数据。在执行操作3011中,操作3011的输入数据a和输出数据b均可存储在存储器单元中。在操作3011完成之后,可将第一中间数据结果b存储在存储器单元中作为操作3011的输出,且还作为操作3012的输入。在执行操作3012时,操作3012的输入数据b和输出数据c均可存储在存储器单元中。在操作3012完成之后,第二中间数据结果c可以存储在存储器单元中作为操作3012的输出,且还作为操作3013的输入。一旦完成所有操作3011-3014,可以将输出数据e存储在存储器单元中。

在图3所示的示例中,存储器单元的容量对于操作3011-3014而言足够大,这意味着所述操作3011-3014的任何一个的输入数据和输出数据的量不超出存储器单元的容量。例如,用于操作3011的输入数据a和输出数据b的量不超出存储器单元的容量,用于操作3012的输入数据b和输出数据c的量不超出存储器单元的容量,用于操作3013的输入数据c和输出数据d的量不超出存储器单元的容量,用于操作3014的输入数据d和输出数据e的量不超出存储器单元的容量。在该示例性示例中,不需要外部存储器设备来存储执行操作中的输入数据、中间数据和输出数据。

图4示出了显示一系列数据操作的图,其中一个操作的数据量超出存储器单元的容量。图4的左部分显示一系列操作和数据,图4的右部分显示存储器单元4000中的数据存储。在图4所示的示例中,输入数据a可通过一系列数据操作进行处理而得到输出数据e。所述一系列数据操作可包括依次执行的操作4011至操作4014。前一操作的输出数据可作为后续操作的输入数据。例如,输入数据a首先由第一操作4011处理以得到第一中间数据结果b。所述一系列数据操作可包括一系列卷积操作或张量操作。在一些实例中,一个操作的整个输入数据和整个输出数据可以在执行操作中存储在同一存储器单元中。

在图4所示的示例性示例中,在执行操作4011之前,输入数据a可以存储在存储器单元中作为待处理数据。在执行操作4011中,操作4011的输入数据a和输出数据b均可存储在存储器单元中。在操作4011完成后,可将第一中间数据结果b存储在存储器单元中作为操作4011的输出且还作为操作4012的输入。

在图4所示的示例性示例中,对于操作4011-4014而言,存储器单元的容量不够大,这意味着操作4011-4014中的一个或多个的输入数据和输出数据的量超出存储器单元的容量。例如,用于操作4013的输入数据和输出数据的量超出存储器单元的容量。在这种情况下,不能在存储器单元内执行操作4013。这种情况的一个解决方案是将操作4013的输入数据和/或输出数据存储在外部存储器装置中。然而,由于外部存储器装置中较低的读取/写入速度和/或系统总线占用,计算性能可能降低。

这种情况的另一解决方案是使操作4013与一个或多个其它操作成组,使得成组操作的总输入数据和总输出数据的量不超出存储器单元的容量。在一些实例中,要与操作4013成组的一个或多个操作可以包括至少一个紧挨操作4013的操作。多种操作成组方案是可能的。比如,操作4013可与操作4012进行成组,如果成组操作的总输入数据b和总输出数据d的量不超出存储器单元的容量。比如,操作4013可与操作4014进行成组,如果成组操作的总输入数据c和总输出数据e的量不超出存储器单元的容量。比如,操作4013可与操作4011和操作4012进行成组,如果成组操作的总输入数据a和总输出数据d不超出存储器单元的容量。比如,操作4013可与操作4012和操作4014进行成组,如果成组操作的总输入数据b和总输出数据e不超出存储器单元的容量。下面将参考图5和图6描述各种操作成组方案。

图5示出了根据本发明的实施例显示对一个操作与另一操作进行成组的方案的图,所述操作的输入数据和输出数据的量超出存储器单元的容量。图5的左部分显示了一系列操作5011-5014和数据a-e,图5的右部分显示了在存储器单元4000的数据存储。图5所示的示例性示例提供了解决方案,用于解决如图4所示的操作4013的数据存储问题,其中操作4013的输入数据c和输出数据d的量超出存储器单元的容量。

在图5所示的示例中,输入数据和输出数据的量超出存储器单元4000的容量的任何第一操作(例如,操作5013)可以至少部分地基于所述操作的输入数据和所述操作的一个或多个参数来识别。比如,卷积操作(例如,卷积层)的输出数据的大小可以依赖于如上文所讨论的卷积的深度、步长和零填充之类的超参数。在所示实例中,操作5013的输出数据d的大小可在输入数据a可用时确定,而且可以判断输入数据c和输出数据d的总和是否可以完全存储在存储器单元中。

当确定所述一系列操作中的第一操作的输入数据和输出数据的量超出存储器单元的容量时,可以从所述一系列操作中选择至少一个第二操作。所述第一操作的处理可以与所述第二操作的处理进行成组,只要所述成组操作的输入数据和输出数据不超出存储器单元的容量。比如,在图5所示的示例中,操作5013(例如,第一操作)和操作5012(例如,第二操作)可以进行成组和处理而具有总的输入数据b和总的输出数据d,当数据b和数据d的总和不超出存储器单元5000的容量时。

所述第一操作可以与一个或多个第二操作进行成组,只要所述成组操作的输入数据和输出数据不超出存储器单元的容量。对于一个识别的第一操作可能存在一个或多个成组方案。所述一个或多个第二操作可包括来自一系列操作中与所述第一操作紧挨的操作。比如,操作5013可以与操作5011和5012成组,而操作5013不可以单独与操作5011成组。所述一个或多个第二操作可包括来自一系列操作中紧挨在所述第一操作之前的操作。可选地,所述一个或多个第二操作可包括来自一系列操作中紧挨在所述第一操作之后的操作。可选地,所述一个或多个第二操作可包括来自一系列操作中紧挨在所述第一操作之前的操作和一系列操作中紧挨在所述第一操作之后的操作。比如,操作5012和操作5014可以与操作5013成组,如果成组操作的总输入数据b和总输出数据e的量不超出所述存储器单元的容量的话。

存储器单元的剩余存储空间可用于存储成组操作的中间数据结果的至少一部分。例如,存储器单元的剩余存储空间可以在其中存储中间数据结果的m等分,m为2或更大的整数。可选地,存储器单元的剩余存储空间可在其中存储中间数据结果的任意部分。在图5所示的示例中,由阴影区域示出的存储器单元5000的剩余存储空间5050可用于存储成组操作的中间数据结果c的至少一部分。成组操作的输入数据的一部分可至少部分基于所述成组操作的中间数据结果的量来处理。比如,成组操作5012和5013的输入数据b的一部分可被处理以生成成组操作的中间数据结果c的一部分,然后成组操作的中间数据结果c的所述一部分可被处理以生成成组操作的输出数据d的一部分。对成组操作的输入数据b的分别的部分的处理可执行多次直到输入数据b的所有部分被处理。当生成成组操作的输出数据d的所有部分时,可以获得成组操作的输出数据d。下面将描述对成组操作的输入数据的分别的各部分的处理。

在数据处理期间,可以改变存储器单元中用于存储数据的区域。比如,在图5所示的示例中,最初数据b可以与数据a连续地存储在存储器单元中,存储器单元中用于存储数据b的区域可转为容纳大小大于数据a的数据d。显然对于本领域技术人员而言,如果数据d的大小等于或小于数据a,可不对存储器单元中用于存储数据b的区域进行转变。另一策略是将数据b存储在存储器单元中的端部区域以消除对数据b转移的必要。

图6示出了显示根据本发明实施例的对一操作与另一操作进行成组的另一方案的图,该操作的数据量超出存储器单元的容量。图6的左部分示出了一系列操作6011-6014和数据a-e,图6的右部分示出了存储器单元6000中的数据存储。图6中所示的示例性示例提供了另一种解决方案,解决图4中所示的操作4013的数据存储问题,其中操作4013的输入数据c和输出数据d的量超出存储器单元的容量。

在图6所示的示例中,一旦从一系列操作6011-6014中识别操作6013为输入数据和输出数据的量超出存储器单元6000的容量的第一操作,可以从所述一系列操作中选择操作6012,且操作6013和操作6012(例如,第二操作)可成组和处理而具有总输入数据c和总输出数据e,当数据c和数据e的总和不超出存储器单元6000的容量时。存储器单元的剩余存储空间可用于存储成组操作的中间数据结果的至少一部分。在图6所示的示例中,由阴影区域示出的存储器单元的剩余存储空间6050可用于存储成组操作的中间数据结果d的至少一部分。例如,存储器单元的剩余存储空间6050可以在其中存储中间数据结果d的m等分,m为2或更大的整数。可选地,存储器单元的剩余存储空间6050可以在其中存储中间数据结果d的任意部分。可至少部分基于成组操作的中间数据结果的量来处理所述成组操作的输入数据的一部分。比如,可以对成组操作6013-6014的输入数据c的一部分进行处理以生成成组操作的中间数据结果d的一部分,然后可以对成组操作的中间数据结果d的所述一部分进行处理以生成所述成组操作的输出数据e的一部分。对成组操作的输入数据c的分别的各部分的处理可以执行多次,直到输入数据c的所有部分被处理。当生成成组操作的输出数据e的所有部分时,可以获得成组操作的输出数据e。

示例1

参考图2的示例性示例中,假设数据a占存储器单元容量的40%,数据b占存储器单元容量的15%,数据c占存储器单元容量的40%,数据d占存储器单元容量的70%,以及数据e占存储器单元容量的20%。在该示例中,操作2013可以被识别为第一操作,其输入数据c和输出数据d的量超出存储器单元的容量(例如,40%+70%>100%)。

在一些实施例中,识别为其输入数据c和输出数据d的量超出存储器单元容量的操作2013可以与选自一系列操作中的至少一个第二操作进行成组。所述至少一个第二操作可以是如图5所示的成组方案中的操作5012。在这个成组方案中,成组操作5012-5013可以具有总输入数据b和总输出数据d。存储器单元5000的剩余存储空间5050(例如,其中已经存储有成组操作的输入数据和输出数据的存储器单元的剩余存储空间)可用于存储所述成组操作的中间数据结果c的至少一部分。存储器单元的剩余存储空间5050可以是临时存储中间数据结果c的一部分的存储空间。在此示例中,存储器单元的剩余存储空间5050是存储器单元的整个容量的15%(例如,100%-15%-70%=15%),这意味着仅有中间数据结果c的一部分可以存储在存储器单元中(例如,40%>15%)。将要存储在存储器单元中的中间数据结果c的一部分可以基于所述整个中间数据结果c的量和存储器单元的剩余存储空间5050而确定。在一些实例中,中间数据结果c的m个等分中的一个可以存储在存储器单元中,m为2或更大的整数。比如,在示例性示例中,所述中间数据结果c的1/3可以存储在存储器单元中(例如,40%/15%=2.667)。m的值可以通过将中间数据的大小除以存储器单元的剩余存储空间的容量来确定,以及将除法的结果舍入到下一个较大整数(例如,除法结果2.667可以舍入到整数3)。可选地,存储器单元的剩余存储空间5050可以存储中间数据结果c的任意部分。

一次可对成组操作的输入数据的一部分进行处理以生成所述成组操作的输出数据的一部分。可以至少部分地基于成组操作的中间数据结果的量来确定所述成组操作的输入数据的所述一部分。在一些实例中,成组操作的输入数据的所述一部分可以包括输入数据的n等分中的一个以及边缘数据,n为2或更大的整数。整数n可以与整数m相同。这里,在一次处理的成组操作的输入数据的所述一部分可以依赖于存储在存储器单元的剩余存储空间中的中间数据结果的部分,因为中间数据结果的所述部分对应于成组操作的输入数据的所述部分。

在示例性示例中,一次可对成组操作的输入数据b的1/3进行处理以生成中间数据结果c的1/3,然后对中间数据结果c的所述1/3进行处理以生成成组操作的输出数据d的1/3。该处理可以执行3次,从而可以获得整个输出数据d。

在一些实例中,成组操作的输入数据的所述一部分可包括所述成组操作的输入数据的另一部分的至少一部分,这意味着待处理的输入数据的一部分存在重叠。在示例性示例中,可一次处理多于1/3的成组操作的输入数据b。

替代地,如图6显示的成组方案,识别的其输入数据和输出数据超出存储器单元容量的操作6013可与操作6014进行成组。成组操作可具有总输入数据c和总输出数据e。存储器单元的剩余存储空间可用于存储成组操作的中间数据结果d的至少一部分。在该示例性示例中,存储器单元的剩余存储空间6050为存储器单元的整个容量的40%(例如,100%-40%-20%=40%),这意味着仅将中间数据结果d的一部分存储在存储器单元中。可以基于整个中间数据结果d的量和存储器单元的剩余存储空间来确定中间数据结果d的所述一部分。在一些实例中,中间数据结果d的m个等分中的一个可以存储在存储器单元中。比如,在示例性示例中,中间数据结果d的1/2可以存储在存储器单元中(例如,70%/40%=1.75)。在示例性示例中,可一次对成组操作的输入数据c的1/2进行处理以生成中间数据结果d的1/2,然后对该中间数据结果d的1/2进行处理以生成成组操作的输出数据e的1/2。该处理可以被执行两次,从而可获得整个输出数据e。可选地,存储器单元的剩余存储空间6050可以在其中存储中间数据结果d的任意部分。

在对识别的操作6013的两种可行成组方案中,优选对操作6013和操作6014进行成组的成组方案,因为操作6013可用较少的子操作(例如,两个子操作)执行。也就是说,当两个或多个成组方案可行而其中第二操作的数量相同时,可确定哪一个成组方案是优选的。确定的标准可为在执行识别的第一操作中的子操作的数量为最小。

上面讨论的示例性成组方案假定了卷积操作的核没有存储在存储器单元中。例如,核可存储在诸如rom的另一存储器装置中。然而,在一些实例中,核可存储在存储数据的同一存储器单元中。例如,每个操作的核可以占存储器单元的容量的1%,则成组操作6012-6013可以具有占存储器单元容量的17%的总输入数据(例如,15%+1%+1%=17%),存储器单元的剩余存储空间5050为存储器单元的整个容量的13%(例如,100%-17%-70%=13%)。

示例2

另一示例性实例中,参考图2,假设数据a占存储器单元容量的40%,数据b占存储器单元容量的40%,数据c占存储器单元容量的80%,数据d占存储器单元容量的80%,数据e占存储器单元容量的10%。在此示例中,操作2012可以从一系列操作2011-2014中识别为第一操作,其输入数据和输出数据的量超出存储器单元的容量(例如,40%+80%>100%)。

当操作2012被识别时,首先可以从该一系列操作中选择一个第二操作,其中,所述第二操作将与所识别的操作2012进行成组。在此示例中,存在两种可行的成组方案,而仅有一个第二操作要与操作2012进行成组。例如,操作2011可以与操作2012进行成组,或者,操作2013可以与操作2012进行成组。对于第一成组方案,操作2011可以与操作2012进行成组。然后确定成组操作2011-2012的输入数据a和输出数据c的量是否超出存储器单元的容量。这里,确定成组操作2011-2012的输入数据a和输出数据c的量超出存储器单元容量(例如,40%+80%>100%)。利用第二成组方案,操作2013可以与操作2012进行成组,然后可以确定成组操作2012-2013的输入数据b和输出数据d的量是否超出存储器单元的容量。这里,确定是成组操作2011-2012的输入数据b和输出数据d的量超出存储器单元的容量(例如,40%+80%>100%)。为此,可以确定不可能通过将操作2012与一个第二操作(例如,紧挨在所识别的操作2012之前的操作2011或紧挨在所识别的操作2012之后的操作2013)进行成组而执行该识别的操作2012。

在这种情况下,可将要与识别的操作2012进行成组的第二操作的数量递增地增加,直到成组操作的输入数据和输出数据的量不超出存储器单元的容量。比如,可以从一系列操作中选择两个第二操作以与操作2012进行成组。在此示例中,当两个第二操作要与操作2012进行成组时,存在两种可行的成组方案。例如,操作2011和操作2013可以与操作2012进行成组,或者,操作2013和操作2014可以与操作2012进行成组。利用第一成组方案,成组操作可包括操作2011-2013。可确定成组2011-2013的输入数据和输出数据d的量是否超出存储器单元的容量。这里,确定成组操作2011-2013的输入数据a和输出数据d的量2013超出存储器单元的容量(例如40%+80%>100%)。通过第二成组方案,所述成组操作可包括操作2012-2014,然后可以确定成组操作2012-2014的输入数据b和输出数据e的量是否超出存储器单元的容量。这里,确定成组操作2012-2014的输入数据b和输出数据e的量没有超出存储器单元的容量(例如,40%+10%<100%)。至此可以确定,通过将操作2012与两个第二操作2013和2014进行成组而执行识别操作2012是可行的。

在这种情况下,在执行成组操作2012-2014时可产生成组操作的两个中间数据结果c和d。存储器单元的剩余存储空间可用于存储至少成组操作2012-2014的中间数据结果c的一部分和中间数据结果d的一部分。在此示例中,存储器单元的剩余存储空间为存储器单元的整个容量的50%(例如,100%-40%-10%=50%),这意味着仅有中间数据结果c的一部分和中间数据结果d的一部分可以存储在存储器单元中。中间数据结果c和d的所述部分可以基于整个中间数据结果c和d的量和存储器单元的剩余存储空间来确定。在一些实例中,中间数据结果c的n等分中的一个和中间数据结果d的n等分中的一个可以存储在存储器单元中。比如,在该示例中,中间数据结果c的1/4和中间数据结果d的1/4可以存储在存储器单元中(例如,(80%+80%)/50%=3.2)。在该示例中,一次可对成组操作的输入数据b的1/4进行处理以生成中间数据结果c的1/4,然后对中间数据结果c的1/4进行处理以生成中间数据结果d的1/4,之后对中间数据结果d的1/4进行处理以生成成组操作的输出数据e的1/4。该处理可以执行四次,从而可获得整个输出数据e。可选地,存储器单元的剩余存储空间可在其中存储中间数据结果c的任意部分和中间数据结果d的任意部分。

存储器单元的剩余存储空间可被分配以基于中间数据结果中的数据大小的关系来存储两个或多个中间数据结果。在该示例中,中间数据结果c与d之间的数据大小关系为1∶1(例如,80%∶80%),因此,可以为中间数据结果c分配存储器单元的剩余存储空间的50%,为中间数据结果d分配存储器单元剩余存储空间的50%。考虑到操作的各种参数,存储器单元的剩余存储空间的分配可以不同。例如,在所述操作为卷积时,可以考虑诸如填充、步长和核之类的参数而确定存储器单元的剩余存储空间的分配。在一些实例中,可以基于存储器单元的结构来分配存储器单元的剩余存储空间以存储两个或多个中间数据结果。比如,存储器单元可以是线性的,这意味着数据从任意地址开始存储在存储器单元中。也就是说,一个数据可以紧挨在另一数据之后存储在存储器单元中。可选地,存储器单元可包括多个较小的存储单元(例如,切片),这意味着数据只能存储在一个或多个存储单元中。也就是说,需要数据对齐以确保输入数据、输出数据和中间数据结果存储在不同的切片中。

示例3

在另一示例性示例中,参考图2,假设数据a占存储器单元容量的10%,数据b占存储器单元容量的40%,数据c占存储器单元容量的80%,数据d占存储器单元容量的80%,数据e占存储器单元容量的10%。在该示例中,可以从一系列操作2011-2014中识别操作2012作为第一操作,操作2012的输入数据和输出数据的量超出存储器单元的容量(例如,40%+80%>100%)。

当操作2012被识别时,首先可以从该系列操作中选择一个第二操作,其中,所述第二操作将与所识别的操作2012进行成组。在此示例中,存在两种可行的成组方案,而仅有一个第二操作要与操作2012进行成组。例如,操作2011可以与操作2012进行成组,或者,操作2013可以与操作2012进行成组。对于第一成组方案,操作2011可以与操作2012进行成组。然后确定成组操作2011-2012的输入数据a和输出数据c的量是否超出存储器单元的容量。这里,确定成组操作2011-2012的输入数据a和输出数据c的量不超出存储器单元的容量(例如,10%+80%<100%)。利用第二成组方案,操作2013可以与操作2012进行成组。然后可以确定成组操作2012-2013的输入数据b和输出数据d的量是否超出存储器单元的容量。这里,确定成组操作2011-2012的输入数据b和输出数据d的量超出存储器单元的容量(例如40%+80%>100%)。至此,可以确定通过将操作2012与一个第二操作进行成组执行识别的操作2012是可行的(例如,紧挨在所识别的操作2012之前的操作2011)。

在该示例中,可以将中间数据结果b的1/4存储在存储器单元中(例如,40%/(100%-10%-80%)=4.0,这意味着成组操作可通过4个子操作执行而成功执行。比如,可一次处理成组操作2011-2012的输入数据a的1/4以生成中间数据结果b的1/4,然后对中间数据结果b的1/4进行处理以生成中间数据结果c的1/4。可执行四次处理,从而可以获得整个输出数据c。然而在一些实例中,考虑所述操作的参数和/或存储器单元的结构,可以将上述除法结果舍入到下一较大整数(例如,除法结果4可以被舍入到下一个较大整数5,除法结果2.667可以被舍入到下一个较大整数3,除法结果3.2可以被舍入到下一较大整数4)。比如,当所述操作是卷积时,可以考虑诸如填充、步长和核的参数而确定成组操作的输入数据的所述部分。

在该示例中,只要识别的操作2012可以通过与一个较小数量的第二操作进行成组而成功执行,就不需要确定是否有可能将识别的操作2012与一个较大数量的第二操作进行成组。比如,由于识别的操作2012可以通过与操作2011进行成组而被成功执行,所以不需要递增地增加第二操作的数量,并确定是否有可能通过与更多其它操作进行成组而执行识别的操作。然而,如果所识别的操作2012没有通过与较小数量的第二操作成组而成功执行,如上所讨论的,可递增地增加第二操作的数量,直到操作2012可以通过与更多第二操作成组而成功执行。

在一些实例中,当(1)所述成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)成组操作的输入数据和输出数据的量超出存储器单元的容量时,可以将成组操作的输出数据和/或输入数据存储在外部存储器中。当第二操作的数量递增地增加到最大值且所识别的操作(即,第一操作,其输入数据和输出数据的量超出存储器单元的容量)仍不能成功执行时,可能会发生这种情况。

示例4

比如,在另一示例性示例中,参考图2,数据a占存储器单元容量的60%,数据b占存储器单元容量的60%,数据c占存储器单元容量的80%,数据d占存储器单元容量的80%,数据e占存储器单元容量的60%。操作2011可以被识别为其输入数据和输出数据的量超出存储器单元的容量的操作(即,第一操作)。然后,可以从操作2012-2014中选择至少一个第二操作,其中,第二操作要与识别的操作2011进行成组。首先选择紧挨的操作2012以与操作2011进行成组。然而,由于数据a和数据c的总和超出了存储器单元的容量(例如,60%+80%>100%),具有存储在存储器单元中的输入数据a和输出数据c两者的成组操作2011和2012不能被执行。在这种情况下,可以将第二操作的数量递增地增加到2,这意味着操作2012和2013与操作2011进行成组。然而,由于数据a和数据d的总和超出了存储器单元的容量(例如,60%+80%>100%),具有存储在存储器单元中的输入数据a和输出数据d两者的成组操作2011-2013不能被执行。然后,可以将第二操作的数量递增地增加到2013,这意味着操作2012-2014与操作2011进行成组。然而,由于数据a和数据e的总和超出了存储器单元的容量(例如,60%+60%>100%),具有存储在存储器单元中的输入数据a和输出数据e两者的成组操作2011-2014不能被执行。

至此,可以确定(1)成组操作中的操作的数量等于一系列操作中的操作的数量(例如,所述成组操作包括操作2011-2014),以及(2)成组操作的输入数据和输出数据的量超出存储器单元的容量(例如,成组操作的总输入数据a和输出数据e的量超出存储器单元的容量)。在一些实例中,输入数据a可存储在外部存储器中,使得存储器单元可用于存储整个输出数据和中间数据b、c和d的一部分。对于每个子操作,可以从外部存储器读取输入数据a的一部分,并基于计算的中间数据b、c和d生成输出数据e的一部分。如上讨论,可以至少部分地基于成组操作2011-2014的中间数据b、c和d的量和输出数据e的量来确定输入数据a的所述一部分。可选地,输出数据e可以存储在外部存储器中,使得存储器单元可用于存储整个输入数据a和中间数据b、c和d的一部分。对于每个子操作,可处理输入数据a的一部分,并基于计算的中间数据b、c和d生成输出数据e的一部分,其被存储至外部存储器中。如上讨论,可以至少部分地基于成组操作2011-2014的中间数据b、c和d的量和输入数据a来确定输入数据a的所述一部分。可选地,输入数据a和输出数据e两者都可以存储在外部存储器中,且存储器单元可用于存储中间数据b、c和d的至少一部分。

图7示出了根据本发明实施例的数据操作的示例性方法700的流程图。方法700可用于通过一系列数据操作来处理输入数据以获得输出数据。该系列数据操作可以包括顺序执行的多个操作。前一操作的输出数据可用作后续操作的输入数据。该系列数据操作可以包括一系列的卷积操作或张量操作。张量操作可以包括池化、尺度上推或relu。可以提供用于每种操作类型的一个或多个层。输入数据a可以是图像数据、音频、视频数据以及其它数据等。方法700可以包括处理步骤701-704。

在处理701中,可以接收待由一系列数据操作处理的输入数据。

在处理702中,可以从该一系列操作中识别第一操作,其中第一操作的输入数据和输出数据的量超出存储器单元的容量。在一些实施例中,该一系列操作中的一个操作的整个输入数据和整个输出数据可在执行操作时存储在同一存储器单元中。如上讨论,可以至少部分地基于输入数据的大小和操作的若干因素(例如,参数)来确定操作的输出数据的大小。

在处理703中,可以从该一系列操作中选择至少一个第二操作。所述至少一个第二操作可以至少部分地基于成组操作的输入数据和输出数据的量和存储器单元的容量而与所述第一操作进行成组。

当确定来自所述一系列操作中的第一操作的输入数据和输出数据的量超出存储器单元的容量时,可以从所述一系列操作中选择至少一个第二操作。只要成组操作的输入数据和输出数据不超出存储器单元的容量,所述第一操作的处理可以与所述第二操作的处理进行成组。比如,在图5所示的示例中,操作5013(例如,具有输入数据和输出数据的总和超出存储器单元容量的第一操作)和操作5012(例如,第二操作5012)可以以总输入数据b和总输出数据d进行成组和处理,只要数据b和数据d的总和不超出存储器单元的容量。

所述至少一个第二操作可包括来自所述一系列操作中紧挨所述第一操作的至少一个操作。比如,所述至少一个第二操作可包括来自所述一系列操作中的紧挨在所述第一操作之前或紧挨在所述第一操作之后的一个操作。

在一些实施例中,处理703可包括确定成组操作的输入数据和输出数据的量是否超出存储器的容量。可以递增地增加所述至少一个第二操作中的多个操作,直到成组操作的输入数据和输出数据的量不超出存储器单元的容量。当(1)成组操作中的操作的数量等于所述一系列操作中的操作的数量,以及(2)成组操作的输入数据和输出数据的量超出存储器单元的容量时,可以将成组操作的输出数据和/或输入数据存储在外部存储器中。

在处理704中,可以对成组操作的输入数据的一部分进行处理,以得到成组操作的输出数据的一部分。也就是说,成组操作的整个输入数据可以通过多个子进程而被处理,其中每个子进程对成组操作的输入数据的一部分进行处理。

在每个子进程中处理的输入数据的所述一部分,可以至少部分地基于成组操作的中间数据结果的量来确定。存储器单元可被配置为将成组操作的整个输入数据和整个输出数据存储在其中,且存储器单元的剩余存储空间可用于存储成组操作的中间数据结果的至少一部分。在一些实例中,中间数据结果c的m个等分中的一个可以存储在存储器单元中,m为2或更大的整数。可选地,存储器单元可以存储中间数据结果c的任意部分。成组操作的输入数据的所述一部分可以包括所述输入数据的n个等分中的一个和边缘数据,n为2或更大的整数。整数n可以与整数m相同。这里,一次处理的成组操作的输入数据的所述一部分可取决于存储在存储器单元剩余存储空间中的中间数据结果的部分,因为中间数据结果的部分对应于成组操作的输入数据的所述一部分。

在一些实施例中,方法700还可以包括组合成组操作的输出数据的每个部分,以得到所述成组操作的输出数据。

本申请还提供了一种数据处理系统。该系统可以包括一个或多个处理器、至少一个存储器单元以及具有存储在其上的指令的一个或多个存储器。存储器单元可以是任何合适的ram,包括静态随机存取存储器(sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(sdram)、双倍数据速率(ddr)、双倍数据速率同步动态随机存取存储器(ddrsdram)、ddr、ddr2、ddr3、t-ram、z-ram等。在一些实例中,存储器单元可以是嵌入式装置的片上存储器。

当由一个或多个处理器执行时,存储在一个或多个存储器上的指令可以使一个或多个处理器:接收待由一系列操作处理的输入数据;从所述一系列操作中识别第一操作,其中所述第一操作的输入数据和输出数据的量超出存储器单元的容量;至少部分地基于成组操作的输入数据和输出数据的量和存储器单元的容量从所述一系列操作中选择至少一个第二操作以与第一操作进行成组;以及处理成组操作的输入数据的一部分,至少部分地基于成组操作的中间数据结果的量来确定输入数据的所述一部分。

该系列操作包括一系列卷积操作和/或一系列张量操作。在一些实例中,所述从所述一系列操作中选择至少一个第二操作以与第一操作进行成组可包括递增地增加至少一个第二操作中的多个操作,直到成组操作的输入数据和输出数据的量不超出存储器单元的容量。当(1)成组操作中的多个操作等于所述一系列操作中的多个操作,以及(2)成组操作的输入数据和输出数据的量超出存储器单元的容量时,所述从所述一系列操作中选择至少一个第二操作以与第一操作进行成组还可包括将成组操作的输出数据和/或输入数据存储在外部存储器中。

图8示出了可配置为实现本申请中公开的任何计算系统的计算机系统801。计算机系统801可包括手机、平板、穿戴式设备、膝上型计算机、台式计算机、中央服务器等。

计算机系统801包括中央处理单元(cpu,本文也称为“处理器”或“计算机处理器”)805,其可以是单核或多核处理器,或用于并行处理的多个处理器。cpu可以是如上描述的处理器。计算机系统801还包括存储器或存储器位置810(例如,随机存取存储器、只读存储器、闪存)、电子存储单元815(例如,硬盘)、用于与一个或多个其它系统通信的通信接口820(例如,网络适配器820),以及外围设备825,诸如高速缓存、其它存储器、数据存储和/或电子显示适配器。在一些情况下,通信接口可以允许计算机与诸如成像装置或音频装置之类的另一装置通信。计算机可以能够从耦接装置接收输入数据以进行分析。存储器810、存储单元815、接口820和外围设备825通过诸如主板的通信总线(实线)与cpu805通信。存储单元815可以是用于存储数据的数据存储单元(或数据储存库)。计算机系统801可借助于通信接口820而可操作地耦接到计算机网络(网络)830。网络830可以是互联网、因特网和/或外联网,或与互联网通信的内联网和/或外联网。在一些情况下,网络830是电信和/或数据网络。网络830可包括一个或多个计算机服务器,其能够实现诸如云计算之类的分布式计算。在一些情况下,在计算机系统801的辅助下,网络830可以实现对等网络,其可使耦接至计算机系统801的装置实现为客户端或服务器。

cpu805可以执行机器可读指令的序列,所述指令可以内置在程序或软件中。所述指令可以存储在诸如存储器810的存储器位置中。所述指令可以被引导到cpu805,其随后可对cpu805进行编程或以其它方式配置以实现本发明的方法。由cpu805执行的操作的示例可以包括提取、解码、执行和回写。

cpu805可以是电路的一部分,例如集成电路。系统801的一个或多个其它组件可以包括在电路中。在一些情况下,电路是专用集成电路(asic)。

存储单元815可存储诸如驱动程序、库和保存的程序之类的文件。存储单元815可存储用户数据,例如用户偏好和用户程序。在一些情况下,计算机系统801可包括在计算机系统801外部的一个或多个附加的数据存储单元,例如位于通过内联网或因特网与计算机系统801通信的远程服务器上。

计算机系统801可通过网络830与一个或多个远程计算机系统通信。比如,计算机系统801可以与用户的远程计算机系统通信。远程计算机系统的示例包括个人计算机、石板或平板pc、智能电话、个人数字助理等。用户可以通过网络830访问计算机系统801。

本文描述的方法可以通过存储在计算机系统801的电子存储位置上的机器(例如,计算机处理器)可执行代码来实现,例如,诸如在存储器810或电子存储单元815上。机器可执行或机器可读代码可以以软件的形式提供。在使用期间,代码可以由处理器805执行。在一些情况下,可以从存储单元815查询该代码,并将该代码存储在存储器710上以供处理器805容易访问。在某些情况下,可以排除电子存储单元815,并将机器可执行指令存储在存储器810上。

所述代码可以被预编译并被配置用于与具有适于执行所述代码的处理器的机器一起使用,或可以在运行时被编译。所述代码可以以编程语言提供,所述编程语言可以被选择以使得所述代码能够以预编译或类编译的方式执行。

本文提供的系统和方法的多个方面,诸如计算机系统801,可以在编程中实现。本技术的各个方面可以被认为是典型地以机器(或处理器)可执行代码和/或关联数据形式的“产品”或“制品”,所述可执行代码和/或关联数据被承载或内置在机器可读介质的类型中。机器可执行代码可以存储在电子存储单元上,诸如存储器(例如,只读存储器、随机存取存储器、闪存)或硬盘。“存储”类型介质可包括计算机的任何或全部有形存储器、处理器或类似部件、或其相关联的模块,相关联的模块例如为各种半导体存储器、磁带驱动器、磁盘驱动器等,其可在软件编程的任何时间提供非瞬态存储。软件的全部或部分可以不时通过因特网或各种其它电信网络进行通信。例如,这些通信可以使软件从一个计算机或处理器加载到另一个计算机或处理器中,例如,从管理服务器或主机计算机到应用服务器的计算机平台中。如此,可承载软件元件的另一种类型的介质包括光、电和电磁波,诸如通过有线和光陆线网络以及各种空中链路在本地设备之间的物理接口上使用。承载这样的波的物理元件,例如有线或无线链路、光链路等也可以被认为是承载软件的介质。如本文所使用的,除非受限于非瞬态、有形的“存储”介质,诸如计算机或机器“可读介质”之类的术语指代参与向处理器提供指令以供执行的任何介质。

因此,诸如计算机可执行代码的机器可读介质可以采取许多形式,包括但不限于有形存储介质、载波介质或物理传输介质。非易失性存储介质例如包括光盘或磁盘,例如任何计算机或类似物中的任何存储设备,其中计算机类似物例如可以用来如附图所示执行数据库等。易失性存储介质包括诸如计算机平台的主存储器之类的动态存储器。有形传输介质包括同轴电缆、铜导线和光纤,导线包括计算机系统内的总线。载波传输介质可以采用电或电磁信号、或声波或光波的形式,例如在射频和红外数据通信中产生的波。由此,计算机可读介质的常见形式例如包括:软式磁碟、软盘、硬盘、磁带、任何其它磁介质、cd-rom、dvd或dvd-rom、任何其它光学介质、打孔卡片纸带、带有孔图案的任何其它物理介质、ram、rom、prom和eprom、flash-eprom、任何其它存储器芯片或盒、传输数据或指令的载波,传输这样的载波的电缆或链路、或计算机可从其读取编程代码和/或数据的任何其它介质。许多这些形式的计算机可读介质中可涉及将一个或多个指令的一个或多个序列传送到处理器以供执行。

计算机系统801可包括电子显示器835或与其通信,电子显示器包括用户界面840以用于例如提供管理接口。ui的示例包括但不限于图形用户界面(gui)和基于web的用户界面。

本发明的方法和系统可以通过一个或多个算法来实现。算法可以通过由中央处理单元805执行的软件来实现。

虽然这里已经示出和描述了本发明的优选实施例,显然对于本领域技术人员来说,这些实施例仅以示例的方式提供。在不背离本发明的情况下,本领域技术人员将会想到许多变化、改变和替换。应当理解,本文描述的本发明的实施例的各种替代方案可用于实施本发明。权利要求旨在限定本发明的范围,并且由此覆盖落在这些权利要求范围内的方法和结构及其等同物。

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