为了探索具有量化卷积层的神经网络的行为,使用深层网络量化器这个例子量化了卷积层的可学习参数squeezenet
神经网络经过再训练后,对新的图像进行分类训练深度学习网络对新图像进行分类的例子。
这个例子使用了带有GPU执行环境的DAG网络。
将网络加载到基本工作空间中进行量化。
net = DAGNetwork with properties: Layers: [68×1 net.cnn.layer. layer] Connections: [75×2 table] InputNames: {'data'} OutputNames: {'new_classoutput'}
定义校准和验证数据。
该应用程序使用校准数据来锻炼网络,收集网络卷积和全连接层中权重和偏差的动态范围,以及网络各层中激活的动态范围。为了获得最好的量化结果,校准数据必须能代表网络的输入。
应用程序使用量化后的验证数据对网络进行测试,了解网络中卷积层量化可学习参数的有限范围和精度的影响。
在本例中,使用MerchData
数据集。定义一个augmentedImageDatastore
对象以调整网络数据的大小。然后,将数据分解为校准和验证数据集。
在matlab命令提示符下,打开应用程序。
在应用程序中,单击新的并选择数字转换网络
.
应用程序验证您的执行环境。有关更多信息,请参阅量化工作流先决条件.
在对话框中,选择执行环境和网络以从基础工作空间量化。在此示例中,选择GPU执行环境和DAG网络,网
.
该应用程序显示所选网络的图层图。
在里面校准工具架的一部分,下校准数据,选择augmentedImageDatastore
对象,该对象包含校准数据,calData
.
点击校准.
的深层网络量化器使用校准数据来运行网络,并收集网络层中可学习参数的范围信息。
校准完成后,app会显示一个表格,其中包含了网络卷积层和全连接层的权重和偏差,以及校准过程中网络各层激活的动态范围及其最小值和最大值。在表格的右侧,应用程序显示了参数的动态范围的直方图。直方图的灰色区域表示量化表示无法表示的数据。有关如何解释这些直方图的更多信息,请参见深度神经网络的量化.
在里面量化列,表示是否对层中的可学习参数进行量化。不是卷积层的图层不能被量化,因此无法选择。在量化之后,未量化的层保持单精度。
在里面证实工具架的一部分,下验证数据,选择augmentedImageDatastore
对象从包含验证数据的基本工作空间,aug_valData
.
在里面证实工具架的一部分,下量化的选择,选择默认度量函数。
点击数字转换和验证.
的深层网络量化器量化网络中的卷积层的权重,激活和偏置,以缩放8位整数数据类型,并使用验证数据来锻炼网络。该应用程序根据正在量化的网络类型确定用于验证的默认度量功能。对于分类网络,应用程序使用前1个精度。
当验证完成时,应用程序显示验证的结果,包括:
用于验证的度量功能
量子化前后度量函数的结果
量化前后网络内存需求(MB)
如果希望使用不同的度量函数进行验证,例如使用Top-5精度度量函数而不是默认的Top-1精度度量函数,则可以定义一个自定义度量函数。将此函数保存在本地文件中。
功能hComputeModelAccuracy = hComputeModelAccuracy(predictionScores, net, dataStore)%%计算模型级精度统计负载地面真实值tmp = readall(数据存储);groundTruth = tmp.response;%与实际地面真相与预测标签相比predictionerror = {};为idx=1:numel(groundTruth) [~, idy] = max(predictionScores(idx,:)); / /将groundTruth改为groundTruthyActual = net.Layers(结束). class(补贴);predictionError{end+1} = (yActual == groundTruth(idx));% #好吧结束%汇总所有预测错误。predictionerror = [predictionerror {:}];精度= SUM(预测值)/ NUMER(预测值);结束
使用此自定义度量功能来重新验证网络量化的选择,输入自定义度量函数的名称,hComputeModelAccuracy
.选择添加加上hComputeModelAccuracy
到应用程序中可用的度量函数列表。选择hComputeModelAccuracy
作为度量函数使用。
定制度量函数必须在路径上。如果公制函数不在路径上,则此步骤将产生错误。
点击数字转换和验证.
该应用程序量化网络,并显示自定义度量函数的验证结果。
该应用程序仅在验证结果表中显示标量值。要查看具有非标量输出的自定义度量函数的验证结果,导出dlquantizer
如下所述的对象,然后使用该对象使用验证
函数在MATLAB命令窗口。
在对网络进行量化和验证之后,可以选择导出量化的网络。
单击出口按钮。在下拉菜单中选择出口量化器
创建一个dlquantizer
对象在基本工作区中。打开GPU编码器应用程序,从量化的神经网络生成GPU代码,选择生成代码
.生成GPU代码需要GPU编码器许可证。
如果量化网络的性能不理想,可以通过取消选择表中的层来选择不量化某些层。要查看效果,请单击数字转换和验证一次。