买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:畅想科技有限公司
摘要:本公开涉及用于深度神经网络的硬件实现的层次化尾数位长度选择。提供了用于选择具有缩减的尾数位长度的、用于表示输入到深度神经网络DNN的层和或从DNN的层输出的值的定点数格式的层次化方法。该方法以每个层具有一个或多个初始定点数格式开始。这些层被分成层的子集,并且定点数格式的尾数位长度在每个子集的基础上从初始定点数格式开始迭代地缩减。如果缩减导致DNN的输出误差超过误差阈值,则丢弃该缩减,并且不再对该子集的层进行缩减。否则,对该子集中的层的定点数格式进行进一步缩减。一旦不能对任何子集进行进一步的缩减,则针对持续增加的多个子集重复该方法,直到每个子集达到预定数量的层为止。
主权项:1.一种计算机实现的方法,所述方法用于选择用来表示输入到深度神经网络DNN的多个层和或从所述DNN的多个层输出的值的定点数格式,以用于配置所述DNN的硬件实现,所述方法包括:接收所述DNN的实例,所述实例被配置为使用针对所述多个层中的每个层的一个或多个初始定点数格式来表示该层的值,每个初始定点数格式包括指数和尾数位长度;识别所述多个层的序列,其中在所述序列中,每个层之前是其所依赖的所述多个层中的任何层;从所述多个层形成多个不相交的子集,其中,所述子集中的每个子集包括所述序列中的一组连续的层;对于多个子集中的每个子集,迭代地将针对所述子集中的层的定点数格式调整为具有下一最低尾数位长度的定点数格式,直到所述DNN的实例的输出误差超过误差阈值为止;响应于确定所述子集包括多于下限阈值数量的层,从所述多个层形成更多数量的不相交子集并重复迭代调整;以及响应于确定所述子集包括小于或等于所述下限阈值数量的层,输出针对所述多个层的定点数格式。
全文数据:用于深度神经网络的硬件实现的层次化尾数位长度选择技术领域本公开涉及神经网络,更具体地,涉及用于深度神经网络的硬件实现的层次化尾数位长度选择。背景技术深度神经网络DNN是一种可用于机器学习应用的人工神经网络。特别地,DNN可以用于信号处理应用,包括图像处理和计算机视觉应用。DNN已经实现于功率资源不是重要因素的应用中。尽管如此,DNN还应用于许多不同的技术领域,在这些技术领域中,用于实现DNN的硬件资源使得功耗、处理能力或硅面积受到限制。因此,需要实现被配置为以有效方式即以在操作时需要更少硅面积或更少处理能力的方式实现DNN的硬件。此外,DNN可以针对各种不同的应用以多种不同的方式来配置。因此,还需要用于实现DNN的、能够支持各种DNN配置的灵活的硬件。下文描述的实施例仅作为示例提供,并不是作为对解决深度神经网络的已知硬件实现的任何或所有缺点的实现方式的限制。发明内容提供本发明内容以介绍下面在具体实施方式中进一步描述的概念的选择。本发明内容不用于识别请求保护的主题的关键特征或本质特征,也不用于限制请求保护的主题的范围。本文描述的是用于选择具有缩减的尾数位长度的、用于表示输入到DNN的层和或从DNN的层输出的值的定点数格式的层次化方法。该方法以每个层具有初始定点数格式开始。这些层被分成相关层的子集,并且定点数格式的尾数位长度在每个子集的基础上从初始定点数格式开始迭代地缩减。如果缩减导致DNN的输出误差超过误差阈值,则丢弃该缩减,并且不再对子集的层进行缩减。否则,对该子集进行进一步缩减。一旦不能对任何子集进行进一步的缩减,则针对持续增加的多个子集重复该方法,直到每个子集达到预定数量的层为止。第一方面提供了一种计算机实现的方法,该方法用于选择用来表示输入到深度神经网络DNN的多个层和或从DNN的多个层输出的值的定点数格式以用于配置DNN的硬件实现。该方法包括:接收DNN实例,该实例被配置为使用针对多个层中的每个层的一个或多个初始定点数格式来表示该层的值,每个初始定点数格式包括指数和尾数位长度;从多个层形成多个不相交的子集;对于多个子集中的每个子集,迭代地将子集中的层的定点数格式调整为具有下一最低尾数位长度的定点数格式,直到DNN实例的输出误差超过误差阈值为止;响应于确定子集包括大于下限阈值数量的层,从多个层形成更多数量的不相交子集并重复迭代调整;以及响应于确定子集包括小于或等于下限阈值数量的层,输出用于多个层的定点数格式。第二方面提供了一种基于计算的设备,该设备用于选择用来表示输入到深度神经网络DNN的多个层和或从DNN的多个层输出的值的定点数格式以用于配置DNN的硬件实现。该基于计算的设备包括:至少一个处理器;以及耦合到该至少一个处理器的存储器,该存储器包括:DNN实例,其被配置为使用针对多个层中的每个层的一个或多个初始定点数格式来表示该层的值,每个初始定点数格式包括指数和初始尾数位长度;以及计算机可读代码,当所述计算机可读代码由至少一个处理器执行时使得该至少一个处理器:从多个层形成多个不相交的子集;对于多个子集中的每个子集,迭代地将子集中的层的定点数格式调整为具有下一最低尾数位长度的定点数格式,直到DNN实例的输出误差超过误差阈值为止;响应于确定子集包括大于下限阈值数量的层,从多个层形成更多数量的不相交子集并重复迭代;以及响应于确定子集包括小于或等于下限阈值数量的层,输出用于多个层的定点数格式。第三方面提供了一种深度神经网络DNN的硬件实现,该硬件实现包括:硬件逻辑,其被配置为:接收针对DNN的层的输入数据值;接收指示关于该层的输入数据值的定点数格式的信息,其中,已根据第一方面的方法选择了该层的输入数据值的定点数格式;基于该层的输入数据值的定点数格式解析该输入数据值;以及根据该层来处理经解析的输入数据值,以生成该层的输出数据值。DNN的硬件实现可以体现在集成电路上的硬件中。可以提供一种在集成电路制造系统中制造硬件实现的方法。可以提供集成电路定义数据集,当在集成电路制造系统中处理时,该集成电路定义数据集配置系统以制造DNN的硬件实现。可以提供一种非暂态计算机可读存储介质,其上存储有DNN的硬件实现的计算机可读描述,当在集成电路制造系统中处理时,使得集成电路制造系统制造体现DNN的硬件实现的集成电路。可以提供一种集成电路制造系统,包括:非暂态计算机可读存储介质,其上存储有DNN的硬件实现的计算机可读描述;布局处理系统,其被配置为处理计算机可读描述,以生成体现DNN的硬件实现的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造DNN的硬件实现。可以提供用于执行本文所述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂态计算机可读存储介质,当该计算机可读指令在计算机系统处被执行时,使得计算机系统执行本文所述的方法。如技术人员易于理解的那样,可以适当地组合上述特征,并且这些特征可以与本文描述的示例的任何方面组合。附图说明将参考附图详细描述示例,其中:图1是示例深度神经网络DNN的示意图;图2是DNN中的示例数据的示意图;图3是用于识别具有缩短的尾数位长度的、用于表示输入到DNN的层和或从DNN的层输出的值的定点数格式的示例方法的流程图;图4是示出输入到DNN的层和或从DNN的层输出的值的示意图;图5是示例DNN和示例DNN的示例序列的示意图;图6是示出在多次迭代中将一组层划分成子集的示意图;图7是用于将子集中的层的定点数格式迭代地调整为具有下一最低尾数位长度的定点数格式直到输出误差超过误差阈值为止的示例方法的流程图;图8是示出DNN的调整后的实例相对于基线输出的输出误差的计算的示意图;图9是示出DNN的调整后的实例相对于已知分类结果的输出误差的计算的示意图;图10是当存在用于多种类型的值的初始定点数格式时图3的框308的示例方法的流程图;图11是示出使用图3的方法针对AlexNetDNN的层的权重和输入数据值所选择的尾数位长度的曲线图;图12是示出使用图3的方法针对GoogLeNetDNN的层的权重和输入数据值所选择的尾数位长度的曲线图;图13是DNN的示例硬件实现的框图;图14是示例性基于计算的设备的框图;图15是DNN的硬件实现被实现于其中的示例计算机系统的框图;以及图16是用于生成体现本文所述的DNN的硬件实现的集成电路的示例集成电路制造系统的框图。附图示出了各种示例。技术人员将理解,附图中示出的元件边界例如,框、框组或其他形状代表边界的一个示例。在一些示例中,可以将一个要素设计为多个要素,或者可以将多个要素设计为一个要素。整个附图中可适当地使用共同的附图标记来表示类似的特征。具体实施方式通过示例给出以下描述,以使本领域技术人员可以做出并使用本发明。本发明不限于本文描述的实施例,并且针对所公开的实施例的各种修改对于本领域技术人员来说将是易于理解的。仅通过示例方式来描述实施例。深度神经网络DNN是一种人工神经网络形式,其包括多个互连层,这些互连层使得DNN能够执行信号处理任务,包括但不限于计算机视觉任务。图1示出了示例DNN100,其包括多个层102-1、102-2、102-3。每个层102-1、102-2、102-3接收输入数据,根据该层处理输入数据以产生输出数据。输出数据作为输入数据提供给另一层,或作为DNN的最终输出数据被输出。例如,在图1的DNN100中,第一层102-1接收针对DNN100的原始输入数据104,并根据第一层102-1处理输入数据以产生输出数据。第一层102-1的输出数据成为第二层102-2的输入数据,第二层102-2根据第二层102-2来处理输入数据以产生输出数据。第二层102-2的输出数据成为第三层102-3的输入数据,第三层102-3根据第三层102-3来处理输入数据以产生输出数据。第三层102-3的输出数据作为DNN的输出数据106被输出。针对层的输入数据所执行的处理取决于层的类型。例如,DNN的每个层可以是多种不同类型中的一种。示例DNN层类型包括但不限于:卷积层、激活层、归一化层、池化层以及完全连接层。对于本领域技术人员易于理解的是,这些是示例性的DNN层类型,而不是穷举列表,并且可能存在其他DNN层类型。对于卷积层,通过使用与该层相关联的权重来对输入数据进行卷积处理来处理该输入数据。具体地,每个卷积层与多个权重w0…wg相关联,这些权重也可以称为滤波器权重或系数。这些权重可以被分组以形成或定义一个或多个滤波器,所述滤波器可被称为内核,并且每个滤波器可与补偿偏差b相关联。参考图2,其示出了DNN中使用的数据的格式的示例概况。如图2所示,DNN中使用的数据可以被布置为P个数据平面,其中每个平面具有维度xxy。DNN可以包括一个或多个卷积层,每个卷积层与多个权重形成的多个滤波器相关联。每个滤波器具有维度mxnxP,并且每个滤波器根据如图2所示的在方向s和t上的若干步骤的卷积运算被应用于输入数据。滤波器的数量和每个滤波器的权重数量可以在卷积层之间变化。卷积神经网络CNN是对图像识别和分类有效的特定类型的DNN,其通常包括多个卷积层。激活层通常跟随在卷积层之后,但这不是一定的,激活层对该层的输入数据执行一个或多个激活函数。激活函数采用单个数字并对其执行非线性数学运算。在一些示例中,激活层可以通过实现纠正线性单元RectifiedLinearUnit,ReLU函数即fx=max0,x而用作ReLU或者通过实现参数纠正线性单元ParametricRectifiedLinearUnit,PReLU函数而用作PReLU。归一化层被配置为执行归一化函数,例如对输入数据执行局部响应归一化LRN函数。池化层通常被插入于连续的卷积层之间,但这不是一定的,池化层执行池化函数例如求最大值函数或平均函数以汇总输入数据的子集。因此,池化层的目的是减小表示的空间大小从而减少网络中的参数和计算的数量,因此还可控制过度拟合。完全连接层通常跟随在多个卷积层和池化层之后,但这不是一定的,完全连接层获得三维输入数据值集并输出N维向量。在DNN用于分类的情况下,N是类别的数量,向量中的每个值表示某个类别的概率。该N维向量是通过一组权重与输入数据值的矩阵乘法之后而产生的,权重之后为偏差补偿。因此,完全连接层接收偏差和一组权重。因此,DNN的每一层接收输入数据值并产生输出数据值;并且一些层还接收权重和偏差。DNN的硬件实现包括硬件逻辑,其被配置为根据DNN的层处理DNN的输入数据。具体地,DNN的硬件实现包括硬件逻辑,其被配置为根据每个层处理该层的输入数据,并针对该层生成输出数据,该输出数据或者成为另一层的输入数据或者成为DNN的输出。例如,如果DNN包括卷积层,之后是激活层,则该DNN的硬件实现包括硬件逻辑,该硬件逻辑被配置为使用与卷积层相关联的权重和偏移对DNN的输入数据执行卷积运算以产生该卷积层的输出数据,并且该硬件逻辑被配置为对激活层的输入数据即卷积层的输出数据应用激活函数以生成DNN的输出数据。如本领域技术人员所知,对于处理一组值的硬件,每个值以数字格式来表示。两种最合适的数字格式是定点数格式和浮点数格式。如本领域技术人员所知,定点数格式在小数点例如十进制小数点或二进制小数点之后具有固定的位数。相反,浮点数格式没有固定的小数点即它可以“浮动”。换句话说,小数点可以放在表示中的任何位置。虽然用浮点数格式表示输入到DNN的层和或从DNN的层输出的值可以允许产生更准确或精确的输出数据,但是在硬件中处理采用浮点数格式的数字是复杂的,这与处理定点数格式的值的硬件相比,会增加硅面积和硬件的复杂性。因此,DNN的硬件实现可以被配置为以定点数格式表示输入到DNN的层和或从DNN的层输出的值,以减少硬件实现的面积、功耗和存储器带宽。公共定点数格式是Q格式,其指定预定数量的整数位a和小数位b。因此,数字可以被表示为Qa.b,其总共需要a+b+1位包括符号位。示例Q格式在下面的表1中示出。表1Q格式描述示例Q4.44个整数位和4个小数位0110.11102Q0.80个整数位和8个小数位.011011102然而,Q格式的缺点在于,用于表示数字的一些位可能被认为是冗余的。在示例中,数字范围[-0.125,0.125]将被表示为3位的精度。此示例范围和精度所需的Q格式为Q0.5。但是,如果假设值的范围是预先知道的,则数字的前两位将永远不会用于确定以Q格式表示的值。例如,表示的前两位对最终数字没有贡献,因为它们分别表示0.5和0.25,因此超出了所要求的范围。然而,它们被用于指示第三位位置的值即,由于相对位位置而为0.125及更大。因此,上述Q格式是用于DNN的硬件实现中的低效定点数格式,因为一些位可能不传达有用信息。因此,在一些情况下,代替使用Q格式,可以将一些硬件实现配置为对DNN的层输入和或输出的值使用如下定点数格式,其中每个值x由固定整数指数e和n位尾数m格式x=2em来表示,其由指数e和尾数位的数量n{e,n}来定义。在一些情况下,尾数m可以用二进制补码格式表示,而在其他情况下,可以使用其他有符号或无符号整数格式。为了减小尺寸并提高DNN的硬件实现的效率,可以将硬件实现配置为以如下定点数格式表示输入到DNN的层和或从DNN的层输出的值,该定点数格式使用能够表示预期或期望的值范围的最小数量的位。由于不同值例如输入数据值、输出数据值、偏差和权重集的范围可能在层内和层之间变化,因此当用于表示输入数据值、输出数据值、权重和或偏差的定点数格式能够在层内和层之间变化时,硬件实现可以更有效地处理DNN。例如,硬件实现可以通过使用如下定点数格式来更有效地实现DNN:包括指数为2和尾数位长度为6的定点数格式用以表示第一层的输入数据值;包括指数为3和尾数位长度为12的定点数格式用以表示第一层的权重;以及包括指数为4和尾数位长度为6的定点数格式用以表示第二层的输入数据值。因此,期望基于每个层识别用于表示输入到或输出于DNN的层的值例如,输入数据值、输出数据值、权重和或偏差的定点数格式例如,包括指数和尾数位长度。用于识别DNN的层的定点数格式的一些方法已经证明在给定尾数位长度的情况下识别每个层的指数方面是有效的,所述方法例如可以是与本申请同一天递交的、题为“HISTOGRAM-BASEDDATAFORMATSELECTIONFORHARDWAREIMPLEMENTATIONOFDEEPNEURALNETWORK用于深度神经网络的硬件实现的基于直方图的数据格式选择”和“END-TO-ENDDATAFORMATSELECTIONFORHARDWAREIMPLEMENTATIONOFDEEPNEURALNETWORK用于深度神经网络的硬件实现的端到端数据格式选择”的、申请人的共同未决的英国专利申请中描述的那些方法,这些申请通过引用并入本文。然而,缩减用于表示DNN的值的尾数位长度可以显着降低DNN的硬件实现的功耗、存储器大小和存储器带宽。因此,本文描述的是用于选择用来表示输入到DNN的层和或从DNN的层输出的值的具有缩减的尾数位长度的定点数格式的层次化方法。本文描述的方法以用于DNN的每一层的一个或多个定点数格式包括指数和尾数位长度开始,并且在给定可接受的输出误差的情况下,以层次化方式缩减那些定点数格式的尾数位长度。具体地,在本文描述的方法中,层被分成不相交的子集,定点数格式的尾数位长度在每个子集的基础上从初始定点数格式被迭代地缩减。如果缩减导致了DNN的输出误差超过误差阈值,则丢弃该缩减,并且不再对该子集进行缩减。但是,如果缩减不会导致DNN的输出误差超过误差阈值,则对子集中的层进行进一步缩减,依此类推。一旦不能对任何子集进行进一步的缩减,就针对数目持续增加的更小的子集重复该方法,直到每个子集达到预定数量的层例如,1为止。由于所描述的方法利用了相关层可能具有相似的尾数位长度因此相关层的定点数格式的尾数位长度可以以类似的方式缩减这一事实的优点,因此这些方法在时间和计算资源方面是高效的。具体地,已经证明相比于试图以朴素的逐层方式缩减尾数位长度的方法,所描述的方法在更短的时间内产生结果。此外,由于对于一个或多个定点数格式的变化的影响所进行的评估是基于DNN的输出做出的,因此考虑了一个或多个变化对整个DNN行为的影响,这提供了现实的对于影响的测量方式。现在参考图3,其示出了用于选择具有缩减的尾数位长度的用来表示输入到DNN的多个层和或从DNN的多个层输出的值的定点数格式的示例方法300,该定点数格式可用于配置DNN的硬件实现。DNN的多个层可以包括DNN的所有层或仅包括DNN的一部分层。方法300可以由基于计算的设备实现,例如下面参考图14描述的基于计算的设备。例如,基于计算的设备例如,基于计算的设备1400可以包括或可以访问其上存储有计算机可读指令的计算机可读介质例如,存储器,该计算机可读介质在由基于计算的设备的处理器执行时使得基于计算的设备执行图3的方法300。如上所述,DNN的每个层可以具有多个值集,这些值集可以以定点数格式来表示。例如,如图4所示,每个层402接收输入数据值并生成输出数据值;并且一些层例如卷积层和完全连接层也可以接收权重和偏差。输入数据值、输出数据值、权重和偏差中的每一个可以由不同的定点数格式表示。方法300可用于为这些值集的任何组合选择定点数格式。例如,方法300可用于选择用来表示每个层的权重的定点数格式;或者,方法300可用于选择用来表示每个层的权重的定点数格式并且选择用来表示每个层的输入数据值的定点数格式。因此,输入到每个层和或从每个层输出的值可包括输入数据值、输出数据值、权重和偏差中的一个或多个。方法300开始于框302,其中接收DNN实例,该实例被配置为针对多个层中的每个层使用一个或多个初始或起始的定点数格式来表示输入到多个层中的每个层和或从多个层中的每个层输出的值。DNN的这种实例可以被称为DNN的初始化实例。DNN实例以可用于测试DNN对输入数据的响应的形式来体现DNN。DNN实例包括但不限于DNN的软件模型或DNN的硬件实现。每个层可以具有一个或多个初始定点数格式。例如,在某些情况下,每个层可以针对输入数据值具有一种初始定点数格式并且针对输出数据值具有不同的初始定点数格式;并且其他层例如卷积层和完全连接层可以具有针对权重和偏差的单独的初始定点数格式。在其他情况下,一些或所有层可能仅具有一个初始定点数格式——例如,用于权重的定点数格式。每个初始定点数格式包括指数e和尾数位长度n,或者由指数e和尾数位长度n定义。层的初始或起始定点数格式可能已经通过另一种方法确定或选择,例如题为“HISTOGRAM-BASEDDATAFORMATSELECTIONFORHARDWAREIMPLEMENTATIONOFDEEPNEURALNETWORK用于深度神经网络的硬件实现的基于直方图的数据格式选择”和“END-TO-ENDDATAFORMATSELECTIONFORHARDWAREIMPLEMENTATIONOFDEEPNEURALNETWORK用于深度神经网络的硬件实现的端到端数据格式选择”的申请人的共同未决的英国专利申请中描述的那些方法。在一些情况下,层的初始定点数格式包括相同的尾数位长度但可以具有不同的指数。例如,一个层的初始定点数格式可以包括指数6和尾数位长度12,并且另一层的初始定点数格式可以包括指数3和尾数位长度12。初始化或配置DNN实例以使用特定定点浮点数格式来表示输入到层或从层输出的值集取决于值的类型。例如,如果定点数格式用于输入到层的值,例如层的输入数据值、权重或偏差,则初始化或配置DNN实例以使用特定定点数格式来表示层的这些值可以包括:将这些值转换为特定的定点数格式并对该层进行配置以根据该定点数格式来解析该值集;或者,对该层进行配置以将值集转换为特定的定点数格式。然而,如果定点数格式用于从层输出的值例如输出数据值,则初始化或配置DNN实例以使用特定定点数格式来表示层的这些值可以包括:对层进行配置以将其生成的输出数据值转换为定点数格式。一旦已经接收到DNN的初始化实例,方法300就前进到框304。在框304处,从DNN的多个层形成多个不相交的子集。术语“子集”用于表示某些内容的一部分,但不是全部。子集可以包括一个要素或多个要素。因此,DNN的层的子集可以包括DNN的一个或多个层,但不包括DNN的所有层。术语“不相交”在本文中用于表示非重叠,使得每个层不能属于多于一个子集。在一些情况下,从多个层形成多个不相交的子集可以包括:确定多个层的序列,并且将层的序列划分为多个连续的层块,其中多个层中的相关层彼此非常接近。例如,可以确定DNN的多个层的序列,其中在该序列中,先于每个层的是其所依赖的一个或多个层。如上所述,DNN包括多个互连层,其中每个层除最后一层之外的输出数据成为后续层的输入数据。从较早层接收输入数据的层被认为依赖于该较早层。例如,图5示出了包括八个层L1,L2,L3,L4,L5,L6,L7和L8的示例DNN500。在该示例中,层1L1的输出数据作为输入数据被提供给层2和层3L2,L3,因此层2和层3被称为依赖于层1;并且,层3L3的输出数据作为输入数据提供给层6L6,因此层6L6依赖于层3L3。因此,如下任意层序列将满足序列中先于每个层的是其所依赖的一个或多个层的序列条件:L1先于L2和L3;L2先于L4;L4先于L5;L3先于L6;L5和L6先于L7;L7先于L8。此类序列的示例包括序列{L1,L2,L4,L5,L3,L6,L7,L8}和序列{L1,L3,L6,L2,L4,L5,L7,L8}。测试表明,相关层可能具有相似的最佳尾数位长度。通过本文所述的对层进行排序,当根据序列将层划分为子集时,子集更可能包含相关层。一旦确定了DNN的层序列,就可以将层序列划分为连续层的子集。如果子集中的层是序列中的连续层,则该子集被称为包括一组连续的层。例如,在图5的序列{L1,L2,L4,L5,L3,L6,L7,L8}中,包括L1、L2和L4的子集将是连续层的子集,因为在序列中的L1、L2和L4之间没有其他层。相反,包括L2、L5和L7的子集不是连续层的子集,因为在序列中的L2和L5之间以及L5和L7之间存在不处于该子集中的层。在一些情况下,DNN层的序列被划分为具有初始子集尺寸G的层的块或子集,其中G是大于或等于2的整数。初始子集尺寸G可以是方法300的输入参数,因此可以在该方法的实现方式之间变化。这允许初始子集尺寸G在不同DNN之间变化并且针对不同类型的值而变化。例如,当方法300用于针对层的权重选择定点数格式时以及在针对层的输入数据值选择定点数格式时,可以使用不同的初始子集尺寸G。初始子集尺寸G可以通过实验选择例如,取决于DNN的尺寸,从2开始选自2的幂。例如,如图6所示,当初始子集尺寸G是四时,图5的示例DNN500可以分成两个子集602、604,每个子集具有四个层。第一子集602包括连续层L1、L2、L4、L5,第二子集604包括连续层L3、L6、L7、L8。尽管以上段落描述了如何通过对层进行排序并将层序列分成多个连续子集来从多个层形成多个不相交的子集,但是对于本领域技术人员来说易于理解的是,这仅是示例,并且可以以任何合适的方式形成多个子集。例如,在其他情况下,具有相似属性的层例如,具有相同滤波器或内核尺寸的卷积层可以被放置在同一子集中;来自相同本地结构例如GoogLeNet中的初始模块或分支网络中的单个分支的层可以被放置在同一子集中;或者可以将层随机地分成子集。在一些情况中,DNN的第一层和或最后一层不被包括在多个层中,因此不被包括在任何子集中。这是因为第一层和最后一层的尾数位长度通常对DNN的整体精度具有很大影响。因此,在一些情况下,DNN的初始化实例被配置为针对DNN的第一层和或最后一层使用具有高尾数位长度例如,12位或更长的定点数格式,方法300不对与第一层和或最后一层相关联的定点数格式的尾数位长度进行调整。一旦从多个层形成了多个不相交的子集,方法300就前进到框306。在框306处,框304的子集之一被识别为用于处理的当前子集。在一些情况下,如果确定了序列,则按照与序列中的层的顺序相对应的顺序来处理子集。因此,在这些情况下,首先处理包括序列中的初始层的子集,然后处理包括序列中的下一层的子集,依此类推,直到到达序列的末尾。例如,参考图6,可以首先处理第一子集602,然后可以处理第二子集604。在其他情况下,选择首先处理具有最大总数的定点数格式的尾数位的子集,并且接下来选择处理具有第二大总数的定点数格式的尾数位的子集,以此类推。然而,对于本领域技术人员易于理解的是,这些仅是示例,并且可以以另一顺序处理子集。一旦将子集之一识别为用于处理的当前子集,则方法300前进到框308。在框308处,尝试缩减针对当前子集中的层的定点数格式的尾数位长度。具体地,将DNN实例针对当前子集中的层的一个或多个值集所使用的定点数格式迭代地调整为具有下一最低尾数位长度的定点数格式,直到DNN实例的输出误差超过了误差阈值ETh为止。在每次迭代期间,针对子集中的每个层确定与当前定点数格式相比具有下一最低尾数位长度的定点数格式。例如,如果子集包括四个层,则针对四个层中的每个层确定具有下一最低尾数位长度的定点数格式。确定具有相对于特定定点数格式的下一最低尾数位长度的定点数格式可以包括i选择要被配置的DNN的硬件实现所支持的与当前定点数格式的尾数位长度相比下一最低尾数位长度;以及ii调整当前定点数格式的指数,以考虑尾数位数的缩减。调整当前定点数格式的指数以考虑尾数位数的缩减可以包括:将指数增加以从尾数中移除的相同数量的位,使得定点数格式覆盖相同范围的值。例如,如果尾数位减少了4位,则指数可以增加4。特别地,一些硬件实现可能仅支持某些尾数位长度集合。例如,DNN的一些硬件实现可能仅支持4、5、6、7、8、10、12和16的尾数位长度。对于该领域的技术人员来说易于理解的是,这仅是示例,并且DNN的其他硬件实现可以支持不同组的尾数位长度和或不同数量的尾数位长度。表2示出了具有下一最低尾数位长度的定点数格式,例如硬件实现支持4、5、6、7、8、10、12和16的尾数位长度的定点数格式。第一示例定点数格式包括指数2和尾数位长度8,所支持的下一最低尾数位长度为7。这使得尾数位长度减少1位,从而使得指数增加1到3。第二示例定点数格式包括指数5和尾数位长度12,所支持的下一最低尾数位长度为10。这使得尾数位长度减少2位,从而使得指数增加2到7。第三示例定点数格式包括指数1和尾数位长度16,所支持的下一最低尾数位长度为12。这使得尾数位长度减少4位,从而使得指数增加4到5。表2一旦针对子集中的每个层确定了具有下一最低尾数位长度的定点数格式,就调整DNN实例以使用所确定的定点数格式来表示子集的层的值。然后将测试输入数据应用于调整后的DNN实例,并且记录调整后的DNN实例响应于测试输入数据的输出。然后根据所记录的输出数据确定调整后的DNN实例的输出误差。如果输出误差未超过误差阈值ETh,则保持调整,并执行另一次迭代。然而,如果输出误差超过误差阈值ETh,则可以丢弃该调整例如,可以调整DNN实例以使用针对该子集的层的先前定点数格式。通过测量DNN的输出,考虑定点数格式调整对整个DNN行为的影响。下面参考图7详细描述将用于子集中的层的定点数格式迭代地调整为具有下一最低尾数位长度的定点数格式直到DNN实例的输出误差超过误差阈值为止的示例方法。下面还参考图7描述可以如何计算DNN实例的输出误差的示例。一旦达到误差阈值,方法300就前进到框310。在框310处,确定是否还有更多尚未尝试减少子集中的层的定点数格式的尾数位长度的子集。如果存在至少一个尚未尝试减少子集中的层的定点数格式的尾数位长度的子集,则方法300前进到框312。然而,如果没有尚未尝试减少子集中的层的定点数格式的尾数位长度的子集,这表明已经尝试减少每个层的定点数格式的尾数位长度,则方法300前进到框314。在框312处,将用于处理的下一子集识别为当前子集。可以使用与在框306中用于选择第一子集以进行处理相同的方法。例如,如上所述,在一些情况下,如果确定了层的序列,则可以按照与该序列中的层的顺序相对应的顺序处理子集。在其他情况下,首先选择处理具有最大总数的定点数格式的尾数位的子集,接下来选择处理具有第二大总数的定点数格式的尾数位的子集,以此类推。一旦选择了另一子集用于处理,方法300就返回到框308,其中尝试减少新的当前子集的层的定点数格式的尾数位长度。在框314处,确定子集是否包括小于或等于下限阈值LTh数量的层。子集中的层的数量在此也可以称为子集的尺寸。在一些情况下,下限阈值LTh被设置为1,以最终尝试单独地减小每个层的定点数格式的尾数位长度。然而,为了减少完成该方法的时间即,减少识别DNN的层的输入值集的定点数格式的时间,可以将下限阈值LTh设置为大于1的值。例如,在一些情况下,下限阈值LTh可以被设置为2。如果子集包括小于或等于下限阈值LTh数量的层,则该方法前进到框318。然而,如果子集包括大于下限阈值LTh数量的层,则方法300前进到框316。在框316处,从多个层形成更多数量的不相交子集。例如,在图6的示例中,在第一次迭代中,将层划分成两个子集602、604,其中每个子集具有四个层。在该示例中,在第二次迭代中,将层划分为四个子集606、608、610、612,其中每个子集包括两个层。第二次迭代的第一子集606包括L1和L2,第二次迭代的第二子集608包括L4和L5,第二次迭代的第三子集610包括L3和L6,第二次迭代的第四子集612包括L7和L8。在一些情况下,每次迭代可以将子集的数量增加预定因子例如,2。类似地,在第三次迭代中,将层划分成八个子集614、616、618、620、622、624、626、628,其中每个子集仅包括单个层。在一些情况下,可以通过将每个当前子集的层划分为多个子集来形成更多数量的不相交子集。在其他情况下,可以通过从所有层的原始集合生成新子集来形成更多数量的不相交子集。在确定层序列的情况下,可以将层划分为更多数量的多个连续子集基于序列。一旦从多个层形成了更多数量的子集,方法300返回到框306,其中基于每个子集,尝试减少每个子集的层的定点数格式的尾数位的数量。在框318处,输出DNN实例中的多个层的定点数格式。在某些情况下,定点数格式可以被输出到存储器。尽管在图3的方法300中,迭代地调整用于一个子集的层的定点数格式直到满足误差阈值为止,然后迭代地调整用于下一子集的层的定点数格式直到满足误差阈值为止,但是在其他示例中,可以以交错的方式来执行对不同子集的定点数格式的调整。具体地,在其他示例中,可以针对所有子集的层的定点数格式进行一次调整,之后针对任何子集的层的定点数格式进行第二次调整。例如,如果存在三个子集,则可以调整一次第一子集的层的定点数格式,然后可以调整一次第二子集的层的定点数格式,然后可以调整一次第三子集的层的定点数格式,然后可以第二次调整第二子集的层的定点数格式,依此类推。如果在任何时候对子集的层的定点数格式的调整使得DNN实例的输出误差超过误差阈值ETh,则丢弃该调整即调整DNN实例使用该子集的层的先前定点数格式,并且不对该子集的层的定点数格式进行进一步调整。然而,可以对其他子集的层的定点数格式进行进一步调整,直到这种调整导致DNN实例的输出误差超过误差阈值ETh为止。因此,在三个子集的示例中,如果对第一子集的层的定点数格式的第一次调整导致DNN实例的输出误差超过误差阈值ETh,但是对第二子集和第三子集的层的定点数格式的第一次调整没有导致输出误差超过误差阈值,则可以对第二子集和第三子集的层的定点数格式进行第二次调整。与在对其他子集的定点数格式进行任何调整之前对一个子集的定点数格式进行所有调整的方法相比,使用这种交错调整方法可以在子集间更均匀地分布误差。一旦根据图3的方法300确定了用于表示输入到DNN的层和或从DNN的层输出的值的具有缩减的尾数位长度的定点数格式,则可以使用一个或多个所识别的定点数格式来配置DNN的硬件实现。例如,可以使用所识别的定点数格式中的一个或多个来将DNN配置为解析采用所识别的一个或多个格式的输入数据值、权重和或偏差。这可以允许硬件实现更有效地处理该层的输入数据、权重和或偏差。在另一示例中,可以使用所识别的层的定点数格式来配置DNN以在其未接收到针对该层的采用所识别的一个或多个定点数格式的输入数据值、权重和或偏差时,将接收到的输入数据值、权重和或偏差转换为所识别的定点数格式,以允许硬件实现更有效地处理该层的输入数据值、权重或偏差。在又一示例中,所识别的定点数格式可以用于配置硬件实现,以将馈送到另一层的一层的输出数据转换为所识别的定点数格式,使得输出数据将以所识别的定点数格式被提供给该另一层。下面参考图13描述DNN的示例硬件实现以及可以如何使用所识别的格式来配置硬件实现。现在参考图7,其示出了用于将子集中的层的定点数格式迭代地调整为具有下一最低尾数位长度的定点数格式直到输出误差超过误差阈值为止的示例方法700。在该方法700中,针对子集中的每个层确定具有下一最低尾数位长度的定点数格式;调整DNN实例以针对该子集的层使用所确定的定点数格式;测试输入数据被应用于调整后的DNN实例,并且记录DNN实例响应于测试输入数据的输出数据;以及确定调整后的DNN实例的输出误差。如果输出误差不超过误差阈值ETh,则重复该方法;但是,如果输出误差超过误差阈值ETh,则丢弃该调整,并且方法结束。图7的方法700是方法300的框308的示例实现方式。方法700开始于框702,其中针对子集中的每个层确定与当前一个或多个定点数格式相比具有下一最低尾数位长度的一个或多个定点数格式,并且调整DNN实例以使用具有下一最低尾数位长度的定点数格式来表示每个层的一组或多组值。如上所述,确定相对于特定定点数格式具有下一最低尾数位长度的定点数格式可以包括:i选择要被配置的DNN的硬件实现所支持的与当前定点数格式的尾数位长度相比下一最低尾数位长度;以及ii调整当前定点数格式的指数,以考虑尾数位数的缩减。调整当前定点数格式的指数以考虑尾数位数的缩减可以包括:将指数增加以从尾数中移除的相同数量的位,使得新的定点数格式覆盖相同范围的值。例如,如果尾数位减少了4位,则指数可以增加4。一旦针对子集的每个层确定了具有下一最低尾数位长度的一个或多个定点数格式,就调整DNN实例以根据具有下一最低尾数位长度的定点数格式来表示子集中的层的相关值集。一旦DNN实例被调整为根据具有下一最低尾数位长度的定点数格式表示子集的层的相关值集,方法700就前进到框704。在框704处,将测试输入数据提供给调整后的DNN实例,并且记录调整后的DNN实例响应于测试输入数据的输出。在DNN是分类网络的情况下,DNN实例的输出可以是一组分对数logit。如本领域技术人员所知,分类网络确定输入数据落入多个类别中的每一个类别的概率。该网络通常确定具有与每个类别相对应的一个要素的数据向量,并且这些要素中的每一个被称为分对数。例如,具有1425个潜在类别标签的分类网络可以输出1425个分对数的向量。在某些情况下,代替地,DNN实例的输出可以为应用于分对数的SoftMax函数的输出。如本领域技术人员所知,SoftMax函数是应用于DNN输出的分对数的、使得与每个分类相关联的值加起来为1的变换。这允许SoftMax函数的输出表示在各类别上的概率分布。SoftMax函数的输出可以称为SoftMax归一化分对数。SoftMax函数可以如式1所示那样来表达,其中si是类别i的softmax输出,zi是类别i的分对数,i和j是对应于类别的向量索引:在一些情况下,可以向调整后的DNN实例提供多组测试输入数据。例如,在某些情况下,预期DNN的输入数据是图像,可以向调整后的DNN实例提供10-50个测试图像。在这些情况下,输出数据可以包括响应于每个测试输入例如测试图像而生成的输出数据例如,分对数。一旦已经记录了调整后的DNN实例响应于测试输入数据的输出数据,方法700就前进到框706。在框706处,确定调整后的DNN实例的输出的误差,其在本文中可被称为与调整后的DNN实例相关联的输出误差。该误差定量地表示输出的质量。在某些情况下,如图8所示,可以将调整后的DNN实例的输出的误差计算为输出相对于基线输出的误差800。在一些情况下,基线输出可以是被配置为以浮点数格式表示输入到每个层以及从其输出的值的DNN实例的输出。这种实例在此可以被称为DNN的浮点实例。如上所述,由于值通常可以以浮点数格式更准确地或者更精确地表示,因此被配置为使用浮点数格式来表示输入到每个层以及从其输出的值的DNN实例表示将产生最佳或最准确的输出的DNN实例。因此,由DNN的浮点实例生成的输出数据可以用作基准或基线输出,其中,根据该基准或基线输出来测算由调整后的DNN实例所生成的输出数据的准确性。在其他情况下,基线输出可以是被配置为根据每层的初始定点数格式来表示输入到该层以及从其输出的值的DNN实例的输出。这可以被称为DNN的起始实例。根据所描述的方法对尾数位长度的任何改变将导致输出相对于DNN的起始实例的准确性的改变。因此,由DNN的起始实例生成的输出数据可以用作基准或基线输出,其中,根据该基准或基线输出来测算由调整后的DNN实例所生成的输出数据的准确性。可以以任何合适的方式确定DNN的基线输出与调整后的DNN实例的输出之间的误差。例如,在输出是分对数集的情况下,可以将基线输出与调整后的DNN实例的输出之间的误差计算为相应的分对数之间的L1距离。这在公式2中进行了说明,其中z是基线输出中的分对数集,z'是调整后的DNN实例的输出中的分对数集:∑i|zi-z′i|2在其他示例中,基线输出与调整后的DNN实例的输出之间的误差可以被计算为SoftMax函数的输出之间的L1距离,可具有如公式3中所示的附加温度参数T,也可以不具有T。升高温度使SoftMax值“更柔和”即饱和度降低到0和1,从而更容易训练。在其他情况下,如图9所示,可以基于输出的地面实况精度来计算输出的误差900。换句话说,该误差可以指示调整后的DNN实例的输出相对于用于测试输入数据的已知结果的准确度。例如,基于已知的针对测试输入数据的正确分类或标签,输出误差可以是前1Top-1分类准确度或者是前5Top-5分类准确度。如本领域技术人员所知,前1分类准确度是对DNN输出的最高分类是正确分类的频率的度量,并且前5分类准确度是对正确分类是DNN输出的前五个分类的频率的度量。在其他情况下,输出的误差可以被计算为图8和图9中所示的方法的组合。例如,可以将输出误差计算为针对正确分类标签的误差和针对基线输出的误差的加权和其可以是DNN的浮点实例即,被配置为以浮点数格式表示每个层的输入和输出的DNN实例或者是DNN的起始实例即,被配置为使用层的初始定点数格式的DNN实例。一旦确定了调整后的DNN实例的输出的误差,方法700就前进到框708。在框708处,确定输出误差是否超过误差阈值ETh。误差阈值可以表示DNN的可接受的输出误差水平。确定是否已超过误差阈值ETh可以基于如何确定输出误差进行。例如,在输出误差被计算为调整后的DNN实例的输出与基线输出之间的差异的情况下,当输出误差大于误差阈值时,输出误差可能超过误差阈值。相反,在输出误差是DNN的准确度的度量的情况下,当输出误差低于误差阈值时例如,前1或前5准确度低于可接受的准确度,输出误差可能超过误差阈值。如果确定在框706中确定的输出误差未超过误差阈值ETh即,它在可接受的输出误差水平内,则接受该调整并且方法700可以进行到框710或者可以直接返回到框702,其中尝试对子集的层的定点数格式进行进一步调整。具体地,在一些情况下,对子集的层的定点数格式进行调整,直到调整后的DNN实例的输出误差超过误差阈值为止。在这些情况下,在确定了输出误差没有超过误差阈值之后,方法700可以直接进行到框702。但是,在其他情况下,为了减少完成该方法所需的时间,每个子集可能存在最大迭代调整次数,如果在超过误差阈值之前达到最大调整迭代次数,则不再对子集的层的定点数格式进行进一步调整。在这些情况下,在确定输出误差未超过误差阈值之后,方法700可以进行到框710。在框710处,确定是否已经执行了方法700的最大迭代次数。如果确定已经执行了最大迭代次数,则方法700结束。然而,如果确定尚未执行方法700的最大迭代次数,则方法700返回到框702,其中尝试进一步调整子集的层的定点数格式。在框712处,在确定输出误差超过误差阈值之后,拒绝在框702中进行的调整。拒绝最近的调整可以包括重新调整DNN实例以使用该调整之前由DNN实例所使用的子集的层的定点数格式。一旦调整被拒绝,则方法700结束。如上所述,每个层可以具有多个值集,每个值集可以以不同的定点数格式来表示。在使用图3的方法300调整至少两种不同类型的值的定点数格式例如,输入数据值的定点数格式和权重的定点数格式的情况下,可以基于每一次发生框308而执行一次图7的方法700,其中用于所有不同类型的值的定点数格式同时被调整例如,可以同时调整子集的层的输入数据值的定点数格式和权重的定点数格式;或者可以基于每次发生框308而针对不同值的定点数格式单独地执行图7的方法700。例如,方法700可以被执行一次以调整输入数据值的定点数格式,并且方法700可以被第二次执行以调整权重的定点数格式。在针对不同类型的值的定点数格式单独执行方法700的情况下,不同类型值的定点数格式被缩减的顺序可能影响能够确定调整定点数格式对于输出误差产生的影响的准确程度。具体地,输入数据值、权重和偏差是层的输入,因此用于这些类型的值的定点数格式影响输出数据值。因此,如果在缩减输出数据值的定点数格式之前缩减输入数据值、权重和偏差的定点数格式,则可以确定对输出数据值的定点数格式的调整对DNN的输出误差的影响的更准确估计。具体地,这允许在缩减输出数据值的定点数格式时考虑输入值的缩减的定点数格式。测试还表明,如果在缩减权重和偏差的定点数格式之前缩减输入数据值的定点数格式,则可以减小输出误差。现在参考图10,其示出了用于实现图3的方法300的框308的方法1000,其中要缩减的定点数格式包括与不同类型的值有关的定点数格式。方法1000开始于框1002,其中确定是否存在要缩减的输入数据值的定点数格式。如果存在要缩减的输入数据值的定点数格式,则首先缩减那些定点数格式,并且方法1000前进到框1004。如果没有要缩减的输入数据值的定点数格式,则方法1000前进到框1006。在框1004处,迭代地缩减用于子集中的层的输入数据值的定点数格式的尾数位长度,直到超过误差阈值为止例如,根据例如图7的方法700。方法1000然后进行到框1006。在框1006处,确定是否存在要缩减的权重的定点数格式。如果存在要缩减的权重的定点数格式,则接下来缩减那些定点数格式,并且方法1000进行到框1008。如果没有要缩减的权重的定点数格式,则该方法1000直接进行到框1010。在框1008处,迭代地缩减子集中的层的权重的定点数格式的尾数位长度,直到超过误差阈值为止例如,根据例如图7的方法700。然后方法1000进行到框1010。在框1010处,确定是否存在要缩减的偏差的定点数格式。如果存在要缩减的偏差的定点数格式,则接下来缩减那些定点数格式,并且方法1000进行到框1012。如果没有要缩减的偏差的定点数格式,则方法1000直接前进到框1014。在框1012处,迭代地缩减子集中的层的偏差的定点数格式的尾数位长度,直到超过误差阈值例如,根据例如图7的方法700。方法1000然后进行到框1014。在框1014处,确定是否存在要缩减的输出数据值的定点数格式。如果存在要缩减的输出数据值的定点数格式,则接下来缩减那些定点数格式,并且方法1000进行到框1016。如果没有要缩减的输出数据值的定点数格式,则方法1000结束。在框1016处,迭代地缩减子集中的层的输出数据值的定点数格式的尾数位长度,直到超过误差阈值例如,根据图7的方法700。然后方法1000结束。示例结果现在参考图11和图12以及表3和表4,其示出了针对AlexNetDNN和GoogLeNetDNN的层所选择的尾数位长度。具体而言,表3示出了当使用50个测试图像、初始子集尺寸G被设置2、第一层和最后一层的定点数格式被设置为12位除了下面所述的内容之外时,针对不同误差阈值表示为基线输出分对数的L1长度的分数的AlexNetDNN的层的平均尾数位长度。表3类似地,表4示出了当使用50个测试图像、初始子集尺寸G被设置为4、第一层和最后一层的定点数格式被设置为12位时,针对不同误差阈值表示为基线输出分对数的L1长度的分数的GoogLeNetDNN的层的平均尾数位长度。表4这些表示出了本文描述的方法能够跨网络非均匀地减少位数,并且更高的阈值需要更多位。图11以图形方式示出在误差阈值为0.9的情况下,针对GoogLeNetDNN的每个卷积层的权重1102和输入数据值1104所选择的尾数位长度。图12以图形方式示出在误差阈值为0.995的情况下,针对GoogLeNetDNN的每个卷积层的权重1202和输入数据值1204所选择的尾数位长度。DNN的示例硬件实现现在参考图13,其示出了DNN的示例硬件实现1300,该示例硬件实现可以基于使用图3、图7和图10的方法300、700和1000所识别的定点数格式来配置。图13的硬件实现1300被配置为通过一系列硬件通道其也可以称为处理通道来计算DNN的输出,其中在每个通道期间,硬件实现接收DNN的层的至少一部分输入数据,并根据该层并且可选地根据一个或多个后续层处理所接收的输入数据以产生处理后的数据。处理后的数据或者被输出到存储器以用作后续硬件通道的输入数据或者作为DNN的输出被输出。硬件实现在单个硬件通道期间能够处理的层数可以基于数据的尺寸、硬件实现和层的顺序。例如,在硬件实现包括用于执行每种可能的层类型的硬件的情况下,包括第一卷积层、第一激活层、第二卷积层、第二激活层以及池化层的DNN可以在第一硬件通道中接收初始DNN输入数据并且根据第一卷积层和第一激活层来处理该输入数据并且将激活层的输出输出到存储器中,然后在第二硬件通道中,从存储器中接收该数据作为输入并且根据第二卷积层、第二激活层以及池化层来处理该数据以产生DNN的输出数据。图13的DNN的示例硬件实现1300包括:输入模块1301、卷积引擎1302、累加缓冲器1304、要素级element-wise操作模块1306、激活模块1308、归一化模块1310、池化模块1312、输出交织模块1314以及输出模块1315。每个模块或引擎实现或处理一种或多种类型的层的全部或一部分。具体地,卷积引擎1302和累加缓冲器1304一起实现或处理卷积层或完全连接层。激活模块1308处理或实现激活层。归一化模块1310处理或实现归一化层。池化模块1312实现池化层,输出交织模块1314处理或实现交织层。输入模块1301被配置为接收当前硬件通道的输入数据,并将其提供给下游模块进行处理。接收输入数据的下游模块取决于要在当前硬件通道中处理的层。卷积引擎1302被配置为使用与特定卷积层相关联的权重对接收到的输入数据执行卷积运算。DNN的每个卷积层的权重可以被存储在系数缓冲器1316中,如图13所示,并且当卷积引擎1302正在处理特定卷积层时,可以将该特定卷积层的权重提供给卷积引擎1302。在硬件实现支持可变权重格式的情况下,卷积引擎1302可以被配置为接收信息,该信息指示正被处理的当前卷积层的权重的一个或多个格式,以允许卷积引擎正确地解析和处理所接收的权重。每个卷积层的权重的格式可以通过本文描述的方法来确定。卷积引擎1302可以包括多个乘法器例如128个和多个加法器,所述多个加法器将乘法器的结果相加以产生单个和。尽管图13中示出了单个卷积引擎1302,但在其他示例中,可以存在多个例如8个卷积引擎,从而可以同时处理多个窗口。卷积引擎1302的输出被馈送到累加缓冲器1304。累加缓冲器1304被配置为接收卷积引擎的输出并将其加到累加缓冲器1304的当前内容。以这种方式,累加缓冲器1304累加卷积引擎1302的结果。虽然在图13中示出单个累加缓冲器1304,但在其他示例中,可以存在多个例如,8个,每个卷积引擎对应1个累加缓冲器。累加缓冲器1304将累加结果输出到要素级操作模块1306,取决于在当前硬件通道期间是否要处理要素级层,要素级操作模块1306可以对累加结果进行操作或不进行操作。要素级操作模块1306被配置为或者接收当前硬件通道的输入数据例如,当在当前硬件通道中未处理卷积层时或者接收来自累加缓冲器1304的累加结果例如,在当前硬件通道中处理卷积层时。要素级操作模块1306可以或者处理所接收的输入数据或者将所接收的输入数据传递到另一模块例如,激活模块1308和或归一化模块1310,这取决于当前硬件通道中是否处理要素级层和或取决于是否要在要素层之前处理激活层。当要素级操作模块1306被配置为处理所接收的输入数据时,要素级操作模块1306对所接收的数据可选地为另一数据集可以从外部存储器获得执行要素级操作。要素级操作模块1306可以被配置为执行任何合适的要素级操作,例如但不限于加法、乘法、求最大值、以及求最小值。然后,取决于是否要在要素级层之后处理激活层,将要素级操作的结果提供给激活模块1308或归一化模块1310。激活模块1308被配置为接收以下之一作为输入数据:经由要素级操作模块1306的硬件通道的原始输入例如,在当前硬件通道中不处理卷积层的情况下;经由要素级操作模块1306的累加的数据例如,在当前硬件通道中处理卷积层并且要素级层或者不在当前硬件通道中被处理或者在当前硬件通道中被处理但要在激活层之后的情况下。激活模块1308被配置为将激活函数应用于输入数据并将输出数据提供回要素级操作模块1306,要素级操作模块1306将其直接或者在要素级操作模块1306对其进行处理之后转发到归一化模块1310。在一些情况下,应用于由激活模块1308接收的数据的激活函数可以根据激活层而变化。在这些情况下,可以例如,在存储器中存储指定要应用于每个激活层的激活函数的一个或多个属性的信息,并且可以在特定硬件通道期间将针对该硬件通道中所处理的激活层的相关信息提供给激活模块1308。在一些情况下,激活模块1308可以被配置为在查找表的条目中存储表示激活函数的数据。在这些情况下,输入数据可用于查找该查找表中的一个或多个条目,并输出表示激活函数的输出的值。例如,激活模块1308可以被配置为通过在从查找表中读取的两个或更多个条目之间进行插值来计算输出值。在一些示例中,激活模块1308可以被配置为通过实现纠正线性单元RectifiedLinearUnit,ReLU函数而作为ReLU进行操作。在ReLU函数中,通过如公式4中所示识别最大值来计算输出要素yi,j,k,其中对于小于0的x值,y=0:yi,j,k=fxi,j,k=max{0,xi,j,k}4在其他示例中,激活模块1308可以被配置为通过实现参数纠正线性单元ParametricRectifiedLinearUnit,PReLU函数而作为PReLU进行操作。PReLU函数执行与ReLU函数类似的运算。具体地,在是常数的情况下,PReLU被配置为生成如公式5中所示的输出要素yi,j,k:yi,j,k=fxi,j,k;w1,w2,b1,b2=max{w1*xi,j,k+b1,w2*xi,j,k+b2}5归一化模块1310被配置为接收以下之一作为输入数据:经由要素级操作模块1306的硬件通道的原始输入数据例如,在当前硬件通道中不处理卷积层并且当前硬件通道中既不处理要素级层也不处理激活层的情况下;经由要素级操作模块1306的累加的数据例如,在当前硬件通道中处理卷积层并且当前硬件通道中既不处理要素级层也不处理激活层的情况下;以及要素级操作模块和或激活模块的输出数据。然后,归一化模块1310对接收的输入数据执行归一化函数以产生归一化数据。在一些情况下,归一化模块1310可以被配置为执行局部响应归一化LRN函数和或局部对比归一化LCN函数。然而,对于本领域技术人员易于理解的是,这些仅是示例,并且归一化模块1310可以被配置为实现任何合适的一个或多个归一化函数。可以配置不同的归一化层来应用不同的归一化函数。池化模块1312可以从归一化模块1310接收归一化数据,或者可以经由归一化模块1310接收针对归一化模块1310的输入数据。在一些情况下,可以经由XBar1318在归一化模块1310和池化模块1312之间传输数据。本文使用的术语“XBar”指的是包含以动态方式将多个模块连接在一起的路由逻辑在内的简单硬件模块。在该示例中,XBar可以动态地连接归一化模块1310、池化模块1312和或输出交织模块1314,这取决于将在当前硬件通道中处理哪些层。因此,XBar可以在每个硬件通道中接收指示哪些模块1310、1312、1314将被连接的信息。池化模块1312被配置为对所接收的数据执行池化函数以产生池化数据,其中,池化函数例如但不限于最大化函数或平均函数。池化层的目的是减小表示的空间大小从而减少网络中的参数和计算的数量,并因此还控制过度拟合。在一些示例中,在基于每个池化层定义的滑动窗口上执行池化操作。输出交织模块1314可以从归一化模块1310接收归一化数据、经由归一化模块1310的归一化函数的输入数据、或者来自池化模块1312的池化数据。在一些情况下,这些数据可以经由XBar1318在归一化模块1310、池化模块1312以及输出交织模块1314之间传送。输出交织模块1314被配置为执行重新排列操作以产生预定顺序的数据。这可以包括对接收到的数据进行排序和或转置。由最后一层产生的数据被提供给输出模块1315,在输出模块1315处,该数据被转换成用于当前硬件通道的所需输出格式。可以根据本文描述的方法来确定期望的输出格式。例如,可以将期望的输出格式确定为用于表示硬件通道的最后一层的输出数据值的定点数格式或用于表示下一硬件通道的第一层的输入数据值的定点数格式。归一化模块1310、池化模块1312以及输出交织模块1314均可以访问共享缓冲器1320,共享缓冲器1320可以被这些模块1310、1312和1314用来将数据写入其中和从中获取数据。例如,共享缓冲器1320可以被这些模块1310、1312、1314使用,以重新排列所接收的数据或所生成的数据的顺序。例如,这些模块1310、1312、1314中的一个或多个可以被配置为将数据写入共享缓冲器1320并以另一顺序读取相同的数据。在一些情况下,尽管归一化模块1310、池化模块1312和输出交织模块1314中的每一个都可以访问共享缓冲器1320,但是可以向归一化模块1310、池化模块1312和输出交织模块1314中的每一个分配共享缓冲器1320中只有它们才能访问的部分。在这些情况下,归一化模块1310、池化模块1312和输出交织模块1314中的每一个可能仅能够从共享缓冲器1320中读取它们已经写入共享缓冲器1320的数据。如上所述,硬件实现1300在任何硬件通道期间使用或激活的模块基于在该硬件通道期间要处理的层。特别地,仅使用或激活与当前硬件通道期间要处理的层相关的模块或组件。如上所述,基于DNN中的层的顺序以及可选地一个或多个其他因素例如,数据的大小来确定通常例如通过软件工具提前确定在特定硬件通道期间要处理的层。例如,在一些情况下,硬件实现可以被配置为基于每个硬件通道执行单个层的处理,除非可以在无需将数据写入层之间的存储器的情况下处理多个层。例如,如果第二卷积层紧跟第一卷积层,则每个卷积层必须在单独的硬件通道中执行,因为来自第一硬件卷积的输出数据需要在它能够用作第二硬件卷积的输入之前被写入存储器。在这些硬件通道中的每一个中,可以仅使用或激活与卷积层相关的模块、组件或引擎,例如卷积引擎1302和累加缓冲器1304。尽管图13的硬件实现1300示出了布置模块、引擎等的特定顺序并且因此示出了对数据的处理如何流经硬件实现,但是应当理解,这仅是示例,并且在其他示例中,可以以其他方式来布置模块和引擎等。此外,其他硬件实现可以实现附加或替代的DNN层类型,因此可以包括不同的模块、引擎等。图14示出了示例性通用的基于计算的设备1400的各种组件,该基于计算的设备1400可以被实现为任何形式的计算和或电子设备,并且可以在该基于计算的设备1400中实现上述方法300、700、1000的实施例。基于计算的设备1400包括一个或多个处理器1402,其可以是微处理器、控制器或任何其他合适类型的处理器,以用于处理计算机可执行指令来控制设备的操作,从而针对输入到DNN的层和从DNN的层输出的值集选择定点数格式。在一些示例中,例如在使用片上系统架构的情况下,处理器1402可以包括一个或多个固定功能块也称为加速器,其实现用于处理计算机可执行指令以在硬件而非软件或固件中控制设备的操作的方法的一部分。可以在基于计算的设备处提供包括操作系统1404或任何其他合适的平台软件的平台软件以使能应用软件,例如用于实现图3的方法300的在设备上执行的计算机可执行代码1405。可以使用可由基于计算的设备1400访问的任何计算机可读介质来提供计算机可执行指令。计算机可读介质可以包括例如计算机存储介质,诸如存储器1406和通信介质。计算机存储介质即,非暂态机器可读介质,例如存储器1406,包括以用于存储诸如计算机可读指令、数据结构、程序模块之类的信息的任何方法或技术实现的易失性和非易失性,可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存或其他存储技术、CD-ROM、数字通用盘DVD或其他光学存储装置、磁盒、磁带、磁盘存储装置或其他磁存储设备,或可用于存储信息以供计算设备访问的任何其他非传输介质。相反,通信介质可以体现计算机可读指令、数据结构、程序模块或调制数据信号中的其他数据,例如载波或其他传输机制。如本文所定义的,计算机存储介质不包括通信介质。尽管在基于计算的设备1400内示出了计算机存储介质即,非态机器可读介质,例如存储器1406,但是应当理解,存储装置可以分散分布或者远程分布并且经由网络或其他通信链路访问例如,使用通信接口1408。基于计算的设备1400还包括输入输出控制器1410,其被布置成将显示信息输出到显示设备1412,显示设备1412可以与基于计算的设备1400分离或集成在一起。显示信息可以提供图形用户界面。输入输出控制器1410还被布置为接收和处理来自一个或多个设备例如用户输入设备1414例如,鼠标或键盘的输入。在一种实施例中,如果显示设备1412是触敏显示设备,则显示设备1412还可以用作用户输入设备1414。输入输出控制器1410还可以将数据输出到除显示设备之外的设备,例如,本地连接的打印设备图14中未示出。图15示出了可以实现本文描述的DNN的硬件实现的计算机系统。该计算机系统包括CPU1502、GPU1504、存储器1506和其他设备1514,例如显示器1516、扬声器1518和摄像机1520。DNN的硬件实现1510对应于图13的DNN的硬件实现1300可以在GPU1504上实现,如图15所示。在一些示例中,可能没有GPU并且CPU可以提供针对DNN的硬件实现1510的控制信息。计算机系统的组件可以经由通信总线1522彼此通信。在其他示例中,DNN的硬件实现1510可以独立于CPU或GPU来实现,并且可以具有到通信总线1522的单独连接。图13的DNN的硬件实现1300被示出为包括多个功能框。这只是示意性的并且不希望限定这些实体的不同逻辑元件之间的严格划分。可以通过任意合适的方式提供每个功能块。将理解的是,本文描述的由DNN的硬件实现或者处理模块所形成的中间值不需要由DNN的硬件实现在任意点处物理生成,而可以仅表示方便描述由DNN的硬件实现在其输入和输出之间执行的处理的逻辑值。本文描述的DNN的硬件实现可以体现在集成电路上的硬件中。一般,以上描述的任意功能、方法、技术、或者组件可以实现在软件、固件、硬件例如,固定逻辑电路、或者它们的任意组合中。本文可以使用术语“模块”、“功能”、“组件”、“元件”、“单元”、“块”、以及“逻辑”来一般地表示软件、固件、硬件、或者它们的任意组合。在软件实现的情况中,模块、功能、组件、元件、单元、块、或者逻辑表示在处理器上被执行时执行指定任务的程序代码。本文描述的算法和方法可以由执行代码的一个或多个处理器执行,该代码使得该一个或多个处理器执行该算法方法。计算机可读存储介质的示例包括随机存取存储器RAM、只读存储器ROM、光盘、闪存、硬盘存储器、以及可以使用磁、光、或者其他技术来存储指令或者可以被机器存取的其他数据的其他存储器设备。本文使用术语“计算机程序代码”和“计算机可读指令”来指代用于处理器的任意种类的可执行代码,包括利用机器语言、解析语言、或者脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码例如,硬件描述语言或者网络列表、以及利用编程语言代码例如,C、Java、或者OpenCL表达的代码。可执行代码可以是例如,任何种类的软件、硬件、脚本、模块、或者程序库,该可执行代码在虚拟机或其他软件环境被适当地执行、处理、解析、汇编、执行时使得支持可执行代码的计算机系统的处理器执行该代码指定的任务。处理器、计算机、或者计算机系统可以是具有处理能力从而使得其能够执行指令的任何种类的设备、机器、或者专用电路、或者它们的集合或部分。处理器可以是任意种类的通用或专用处理器,例如,CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路ASIC、可编程逻辑阵列、现场可编程门阵列FPGA等。计算机或计算机系统可以包括一个或多个处理器。还希望覆盖定义本文描述的硬件配置的软件,例如,用于设计集成电路或者用于配置可编程芯片以实现期望功能的HDL硬件描述语言软件。即,可以提供其上编码有集成电路定义数据集形式的计算机可读程序代码的计算机可读存储介质,该计算机可读程序代码在集成电路制造系统中被处理即运行时将该系统配置为制造本文描述的DNN的硬件实现。集成电路定义数据集可以是例如,集成电路描述。因此,提供了一种在集成电路制造系统处制造本文描述的DNN的硬件实现的方法。而且,提供了一种集成电路定义数据集,该集成电路定义数据集在被集成电路制造系统处理时,使得执行制造DNN的硬件实现的方法。集成电路定义数据集可以采用计算机代码的形式,例如,作为网络列表、用于配置可编程芯片的代码,作为在任意等级定义适用于集成电路的制造的硬件的硬件描述语言包括寄存器传送级RTL代码,作为高级电路表示例如,Verilog或者VHDL,以及作为低级电路表示例如,OASISRTM和GDSII。可以在被配置用于在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理在逻辑上定义适用于集成电路的制造的硬件的较高级表示例如,RTL,其中该制造定义包括电路元件的定义和用于组合这些元件的规则,以生成表示所定义的集成电路的制造定义。在计算机系统处执行软件以定义机器的一般情况中,可能需要一个或多个中间用户步骤例如,提供命令、变量等,以使被配置用于生成集成电路的制造定义的计算机系统执行定义集成电路的代码从而生成该集成电路的制造定义。现在参考图16,描述在集成电路制造系统处处理集成电路定义数据集,以配置该系统制造DNN的硬件实现的示例。图16示出被配置为制造本文中的任意示例中描述的DNN的硬件实现的集成电路IC制造系统1602的示例。具体地,IC制造系统1602包括布局处理系统1604和集成电路生成系统1606。IC制造系统1602被配置为接收IC定义数据集例如,定义在本文的任意示例中描述的DNN的硬件实现,处理IC定义数据集,并且根据IC定义数据集例如,体现本文的任意示例中描述的DNN的硬件实现的IC定义数据集生成IC。IC定义数据集的处理将IC制造系统1602配置为制造体现本文中的任意示例描述的DNN的硬件实现的集成电路。布局处理系统1604被配置为接收并处理IC定义数据集,以确定电路布局。根据IC定义数据集确定电路布局的方法是本领域已知的,例如,可以包括综合RTL代码来确定将要生成的电路的门级表示例如,在逻辑组件例如,NAND、NOR、AND、OR、MUX、以及FLIP-FLOP组件方面。可以通过确定逻辑组件的位置信息,从电路的门级表示确定电路布局。这可以自动或者在用户参与下实现,以优化电路布局。当布局处理系统1604已经确定电路布局时,其可以向IC生成系统1606输出电路布局定义。电路布局定义可以是例如,电路布局描述。IC生成系统1606根据电路布局定义生成IC,如本领域已知的。例如,IC生成系统1606可以执行半导体器件制作处理来生成IC,该半导体器件制作处理可以包括多步骤顺序的光刻处理以及化学处理步骤,在这些化学处理步骤期间电子电路逐渐形成在由半导体材料制成的晶片上。电路布局定义可以是掩模形式的,该掩模可以用在根据电路定义生成IC的光刻处理中。替代地,提供给IC生成系统1606的电路布局定义可以是计算机可读代码形式的,IC生成系统1606可以使用计算机可读代码来形成用于生成IC的适当掩模。由IC制造系统1602执行的不同处理可以全部在一个位置处实现,例如,由一方实现。替代地,IC制造系统1602可以是分布式系统,因此一些处理可以在不同位置执行,并且可以由不同方执行。例如,以下阶段中的一些阶段可以在不同位置和或由不同方执行:i综合表示IC定义数据集的RTL代码以形成将要生成的电路的门级表示,ii基于门级表示生成电路布局,iii根据电路布局形成掩模,以及iv使用掩模制作集成电路。在其他示例中,集成电路制造系统处的集成电路定义数据集的处理可以将系统配置为制造DNN的硬件实现,而不对IC定义数据集进行处理来确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器例如FPGA的配置,并且该数据集的处理可以配置IC制造系统以生成具有该定义的配置的可重新配置的处理器例如,通过将配置数据加载到FPGA。在一些实施例中,集成电路制造定义数据集在集成电路制造系统中被处理时,可以使得集成电路制造系统生成本文描述的设备。例如,通过集成电路制造定义数据集以针对图16描述的方式对集成电路制造系统的配置可以使本文描述的设备被制造出来。在一些示例中,集成电路定义数据集可以包括在该数据集处定义的硬件上运行的软件或者与在该数据集处定义的硬件组合。在图16所示的示例中,可以通过集成电路定义数据集进一步将IC生成系统配置为在制造集成电路时,根据集成电路定义数据集处定义的程序代码将固件加载到集成电路中或者向集成电路提供程序代码供集成电路使用。本申请中阐述的概念在设备、装置、模块、和或系统以及在本文实现的方法中的实施方式相比已知的实施方式可以产生性能改进。性能改进可以包括计算性能增加、延迟减小、吞吐量增加、和或功耗减少中的一项或多项。在例如,集成电路中制造这些设备、装置、模块、和系统期间,可以在性能改进和物理实现之间进行平衡,从而改善制造方法。例如,可以在性能改进和布局区域之间进行平衡,从而匹配已知实施方式的性能但使用更少的硅。这可以通过例如,以连续方式重复使用功能块或者在设备、装置、模块、和或系统的元件之间共享功能块来实现。相反,导致设备、装置、模块、以及系统的物理实现的改进例如,硅面积减小的本申请的概念可以换取改进的性能。这可以通过例如,在预定区域预算中制造模块的多个实例来实现。申请人单独公开了本文描述的每个单独特征、以及两个以上这样的特征的任意组合,以使得能够根据本领域技术人员的公知常识基于说明书实施这些特征或组合,而不管这些特征或特征组合是否解决了本文公开的任何问题。鉴于以上描述,对于本领域技术人员易于理解的是,可以在本发明的范围内做出各种修改。
权利要求:1.一种计算机实现的方法,所述方法用于选择用来表示输入到深度神经网络DNN的多个层和或从所述DNN的多个层输出的值的定点数格式,以用于配置所述DNN的硬件实现,所述方法包括:接收所述DNN的实例,所述实例被配置为使用针对所述多个层中的每个层的一个或多个初始定点数格式来表示该层的值,每个初始定点数格式包括指数和尾数位长度;从所述多个层形成多个不相交的子集;对于多个子集中的每个子集,迭代地将针对所述子集中的层的定点数格式调整为具有下一最低尾数位长度的定点数格式,直到所述DNN的实例的输出误差超过误差阈值为止;响应于确定所述子集包括多于下限阈值数量的层,从所述多个层形成更多数量的不相交子集并重复迭代调整;以及响应于确定所述子集包括小于或等于所述下限阈值数量的层,输出针对所述多个层的定点数格式。2.如权利要求1所述的方法,其中,迭代地将针对所述子集中的层的定点数格式调整为具有下一最低尾数位长度的定点数格式包括:针对所述子集的每个层的定点数格式,确定具有下一最低尾数位长度的定点数格式;将所述DNN的实例所使用的针对所述子集中的每个层的定点数格式调整为所确定的具有下一最低尾数位长度的定点数格式;确定调整后的所述DNN的实例响应于测试输入数据的输出;确定调整后的所述DNN的实例的输出误差;响应于确定所述输出误差超过所述误差阈值,逆转对于所述DNN的实例的所述调整;以及响应于确定所述输出误差未超过所述误差阈值,重复进行确定定点数格式、调整定点数格式、确定输出、以及确定输出误差。3.如权利要求1或2所述的方法,还包括:识别所述多个层的序列,其中在所述序列中,每个层之前是其所依赖的所述多个层中的任何层,并且其中,所述子集中的每个子集包括所述序列中的一组连续的层。4.如权利要求1或2所述的方法,其中,所述多个层不包括所述DNN的第一层和或所述DNN的最后一层。5.如权利要求1或2所述的方法,其中,在对任何子集进行定点数格式的第二次调整之前,对所有子集进行定点数格式的第一次调整。6.如权利要求1或2所述的方法,其中,在针对第二子集中的层的定点数格式进行第一次调整之前,完成针对第一子集中的层的定点数格式的所有迭代调整。7.如权利要求1或2所述的方法,其中,存在针对所述多个层中的至少一个层的输入数据值的初始定点数格式,并且存在针对所述多个层中的至少一个层的权重的初始定点数格式,并且迭代地将针对所述子集中的层的定点数格式调整为具有下一最低尾数位长度的定点数格式直到所述DNN的实例的输出误差超过误差阈值为止包括:迭代地将针对所述子集中的层的输入数据值的定点数格式调整为具有下一最低尾数位长度的定点数格式,直到所述DNN的实例的输出误差超过所述误差阈值为止;以及在迭代地调整针对输入数据值的定点数格式之后,迭代地将所述子集中的层的权重的定点数格式调整为具有下一最低尾数位长度的定点数格式,直到所述DNN的实例的输出误差超过所述误差阈值为止。8.如权利要求7所述的方法,其中,存在针对所述多个层中的至少一个层的输出数据值的初始定点数格式,并且迭代地将针对所述子集中的层的定点数格式调整为具有下一最低尾数位长度的定点数格式直到所述DNN的实例的输出误差超过误差阈值为止包括:在迭代地调整针对输入数据值的定点数格式之后,迭代地将针对所述子集中的层的输出数据值的定点数格式调整为具有下一最低尾数位长度的定点数格式,直到所述DNN的实例的输出误差超过误差阈值为止。9.如权利要求1或2所述的方法,其中,所述DNN是分类网络,并且所述输出误差是所述DNN的实例响应于测试输入数据的输出的前1分类准确度或前5分类准确度。10.如权利要求1或2所述的方法,其中,所述DNN是分类网络,并且所述输出误差是所述DNN的实例响应于测试输入数据的输出的分对数与基线输出的分对数之间的L1差异的总和,或者所述输出误差是所述DNN的实例响应于测试输入数据的输出的SoftMax归一化分对数与基线输出的SoftMax归一化分对数之间的L1差异的总和。11.如权利要求10所述的方法,还包括:通过将所述测试输入数据应用于所述DNN的被配置为使用浮点数格式表示输入到所述DNN的每个层和从所述DNN的每个层输出的值,来生成所述基线输出。12.如权利要求1或2所述的方法,其中,层的所述下限阈值数量是1。13.如权利要求1或2所述的方法,其中,层的所述下限阈值数量大于1。14.如权利要求1或2所述的方法,其中,从所述多个层形成更多数量的不相交子集包括:将每个子集中的层划分为多个不相交的子集和或从所述多个层形成两倍的不相交子集。15.如权利要求1或2所述的方法,其中,输入到所述多个层和或从所述多个层输出的值包括如下项中的一项或多项:输入数据值、输出数据值、权重、以及偏差。16.如权利要求1或2所述的方法,其中,所述DNN是卷积神经网络。17.如权利要求1或2所述的方法,还包括:将所述DNN的硬件实现配置为使用针对所述多个层中的至少一个层所输出的定点数格式来表示所述至少一个层的值。18.一种计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令在计算机系统上被执行时,使得所述计算机系统执行权利要求1或2所述的方法。19.一种深度神经网络DNN的硬件实现,包括:硬件逻辑,其被配置为:接收针对所述DNN的层的输入数据值、权重集、或偏差集;接收指示针对所述层的输入数据值、权重集、或偏差集的定点数格式的信息,其中,针对所述层的输入数据值、权重集、或偏差集的定点数格式是根据权利要求1或2所述的方法选择的;基于针对所述层的输入数据值、权重集、或偏差集的定点数格式来解析所述输入数据值、权重集、或偏差集;以及根据所述层来处理经解析的输入数据值、权重集或偏差集,以生成所述层的输出数据值。20.如权利要求19所述的DNN的硬件实现,其中,所述硬件逻辑还被配置为:接收指示针对所述层的输出数据值的定点数格式的信息,针对所述层的输出数据值的定点数格式是根据权利要求1或2所述的方法选择的;以及将所述层的输出数据值转换为针对所述层的输出数据值的定点数格式。
百度查询: 畅想科技有限公司 用于深度神经网络的硬件实现的层次化尾数位长度选择
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。