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