主要内容

深神经网络的量化

在数字硬件中,数字是以二进制字存储的。二进制字是由位(1和0)组成的固定长度序列。数据类型定义硬件组件或软件功能如何解释这个1和0的序列。数字可以表示为整数(通常称为定点)或浮点数据类型。

大多数预训练神经网络和使用深度学习工具箱™训练的神经网络使用单精度浮点数据类型。即使是很小的经过训练的神经网络也需要相当大的内存,并且需要能够执行浮点运算的硬件。这些限制限制了深度学习能力在低功耗微控制器和fpga上的部署。

使用深度学习工具箱型号量化库支持包,您可以量化网络以使用8位缩放的整数数据类型。金宝app

神经网络的量化需要GPU用于深度学习库的GPU编码器™接口金宝app支持包,以及深度学习工具箱模型量化库支持包。使用GPU需要CUDA®启用nvidia.®GPU具有计算能力6.1,6.3或更高。

精度和范围

与单精度浮点数据类型相比,缩放的8位整数数据类型具有有限的精度和范围。当从较大的浮点数据类型施放到较小的数据类型时,存在几个数值注意事项。

  • 精度损耗:精度损耗是舍入误差。当发生精度损耗时,该值将舍入到最接近的数字,该数字由数据类型表示。在将它绑在一起的情况下:

    • 正无穷方向上最接近可表示值的正数。

    • 负无穷方向上最接近可表示值的负数。

    在matlab.®属性可以执行这种舍入函数。

  • 下溢:下溢是一种精度损耗。当值小于数据类型表示的最小值时,会出现溢出。发生这种情况时,值达到零。

  • 溢出:当值大于数据类型可以表示的最大值时,发生溢出。发生溢出时,该值达到数据类型表示的最大值。

动态范围的直方图

使用深网络量化器应用程序收集和可视化卷积层的权重和偏置的动态范围和网络的完全连接层,以及网络中所有层的激活。该应用程序为网络的卷积层的权重,偏置和激活分配缩放的8位整数数据类型。该应用程序显示每个参数的动态范围的直方图。以下步骤描述了如何产生这些直方图。

  1. 考虑在锻炼网络时记录参数的以下值。

  2. 找到参数的每个记录值的理想二进制表示。

    最高有效位(MSB)是二进制字的最左位。这个位对数字的值贡献最大。每个值的MSB用黄色突出显示。

  3. 通过对齐二进制单词,您可以看到参数的记录值使用的位的分布。MSB在每个列中的MSB之和以绿色突出显示,介绍了记录值的汇总视图。

  4. 显示MSB计数的每个位位置作为一个热图。在这张热图中,深蓝色区域对应着位位置中较大数量的MSB。

  5. 软件分配一个数据类型,该数据类型可以表示捕获最多信息的位位置。在这个例子中,软件从2中选择一个表示位的数据类型3.到2-3.需要一个附加的符号位来表示值的符号。

  6. 分配数据类型后,将删除该数据类型之外的任何位。由于分配较小的数据类型的固定长度,精度损耗,溢出和下溢,所以不可通过数据类型表示的值。

    在该示例中,值0.03125遭受下溢,因此量化值为0.值2.1遭受一些精度损耗,因此量化值为2.125。值16.250大于数据类型的最大可表示值,因此该值溢出,量化值饱和至15.874。

  7. 深度网络量化器应用程序在卷积层和网络的完全连接层中显示每个可学习参数的此热映射直方图。直方图的灰色区域显示了无法由数据类型表示的位。

也可以看看

应用

职能