主要内容

验证

对深度神经网络进行量化和验证

描述

验证结果=验证(quantObj,valData)量化网络卷积层中的权重、偏差和激活,并验证数字量化器对象,quantObj以及使用valData.

验证结果=验证(quantObj,valData,量子点)量化网络卷积层中的权重、偏差和激活,并验证数字量化器对象,quantObj,使用valData,以及可选参数量子点指定用于评估量化网络性能的度量函数。

要了解量化深度神经网络所需的产品,请参下载188bet金宝搏阅量化工作流先决条件.

例子

全部崩溃

此示例演示如何量化神经网络卷积层中的可学习参数,并探索量化网络的行为挤压网神经网络经过再训练后,根据网络的特征对新图像进行分类训练深度学习网络对新图像进行分类实例在该示例中,网络所需的存储器通过量化减少约75%,而网络的精度不受影响。

加载预训练网络。.是的输出网络训练深度学习网络对新图像进行分类实例

net = DAGNetwork with properties: Layers: [68x1 nnet.cnn.layer.Layer] Connections: [75x2 table] InputNames: {'data'} OutputNames: {'new_classoutput'}

定义用于量化的校准和验证数据。

校准数据用于收集网络卷积层和完全连接层中权重和偏差的动态范围以及网络所有层中激活的动态范围。为了获得最佳量化结果,校准数据必须代表网络的输入。

验证数据用于量化后的网络测试,以了解网络中量化卷积层的有限范围和精度的影响。

在本例中,使用水星数据集。定义一个增强图像数据存储对象来调整网络数据的大小。然后,将数据拆分为校准和验证数据集。

解压(“MerchData.zip”); imds=图像数据存储(“水星”,...“包含子文件夹”符合事实的...“标签源”,“foldernames”); [calData,valData]=splitEachLabel(imds,0.7,“随机化”);aug_calData=增强的图像数据存储([227 227],calData);aug_valData=增强的图像数据存储([227 227],valData);

创建一个数字量化器对象并指定要量化的网络。

quantObj=数字量化器(净);

定义用于比较量化前后网络行为的度量函数。将此函数保存在本地文件中。

作用精度=HcomputeModelAccurance(预测核心、网络、数据存储)%%计算模型级精度统计信息%装载地面真相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(predictionError)/numel(predictionError);终止

指定度量函数中的度量值DLQ量化选项对象。

quantOpts=dlquantizationOptions(“MetricFcn”,...{@(x)HcomputeModelAccurance(x,net,aug_valData)};

使用校准函数用于使用样本输入练习网络并收集范围信息校准函数练习网络,并收集网络卷积层和完全连接层中的权重和偏差的动态范围,以及网络所有层中激活的动态范围。函数返回一个表。表的每一行包含优化网络的可学习参数的范围信息rk。

计算结果=校准(quantObj,aug_calData)
calResults = 95 x5表优化层名称网络层名称可学的/激活MinValue MaxValue  __________________________________________________ _________________________ ________________________ __________ ___________ {' conv1_relu_conv1_Weights’}{‘relu_conv1}“权重”-0.91985 - 0.88489{‘conv1_relu_conv1_Bias} {' relu_conv1 '}“偏见”-0.07925 - 0.26343{‘fire2-squeeze1x1_fire2-relu_squeeze1x1_Weights}{‘fire2-relu_squeeze1x1}“权重”-1.38 - 1.2477{‘fire2-squeeze1x1_fire2-relu_squeeze1x1_Bias}{‘fire2-relu_squeeze1x1}“偏见”-0.11641 - 0.24273{‘fire2-expand1x1_fire2-relu_expand1x1_Weights}{‘fire2-relu_expand1x1}“权重”-0.7406 - 0.90982{' fire2-expand1x1_fire2-relu_expand1x1_Bias}{‘fire2-relu_expand1x1}“偏见”-0.060056 - 0.14602{‘fire2-expand3x3_fire2-relu_expand3x3_Weights}{‘fire2-relu_expand3x3}“权重”-0.74397 - 0.66905{‘fire2-expand3x3_fire2-relu_expand3x3_Bias}{‘fire2-relu_expand3x3}“偏见”-0.051778 - 0.074239 {' fire3-squeeze1x1_fire3-relu_squeeze1x1_Weights '}{'fire3-relu_squeeze1x1'} "Weights" -0.77263 0.68897 {'fire3-squeeze1x1_fire3-relu_squeeze1x1_Bias' } {'fire3-relu_squeeze1x1'} "Bias" -0.10141 0.32678 {'fire3-expand1x1_fire3-relu_expand1x1_Weights' } {'fire3-relu_expand1x1' } "Weights" -0.72131 0.97287 {'fire3-expand1x1_fire3-relu_expand1x1_Bias' } {'fire3-relu_expand1x1' } "Bias" -0.067043 0.30424 {'fire3-expand3x3_fire3-relu_expand3x3_Weights' } {'fire3-relu_expand3x3' } "Weights" -0.61196 0.77431 {'fire3-expand3x3_fire3-relu_expand3x3_Bias' } {'fire3-relu_expand3x3' } "Bias" -0.053612 0.10329 {'fire4-squeeze1x1_fire4-relu_squeeze1x1_Weights'} {'fire4-relu_squeeze1x1'} "Weights" -0.74145 1.0888 {'fire4-squeeze1x1_fire4-relu_squeeze1x1_Bias' } {'fire4-relu_squeeze1x1'} "Bias" -0.10886 0.13882 ...

使用验证函数量化网络卷积层中的可学习参数并练习网络。该函数使用中定义的度量函数DLQ量化选项目的比较量化前后的网络结果。

valResults=验证(quantObj、aug_valData、quantOpts)
valResults=带字段的结构:NumSamples:20 MetricResults:[1x1结构]

检查测量结果验证输出的字段,以查看量化网络的性能。

valResults.MetricResults.Result
ans=2x3表网络实现MetricOutput LearnableParameterMemory(字节)uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

在本例中,通过量化,网络所需的内存减少了约75%。网络的精度不受影响。

中指定的网络卷积层的权重、偏差和激活数字量化器对象现在使用缩放的8位整数数据类型。

此示例演示如何量化神经网络卷积层中的可学习参数,并探索量化网络的行为标识网神经网络。量化通过将网络层的权重、偏差和激活量化为8位缩放整数数据类型,有助于降低深度神经网络的内存需求。使用MATLAB®从目标设备检索预测结果。

要运行此示例,您需要下面列出的产品下载188bet金宝搏FPGA在里面量化工作流先决条件.

有关其他要求,请参见量化工作流先决条件.

在当前工作目录中创建一个名为getLogoNetwork.m。在文件中输入以下行:

作用net=getlogonnetwork()数据=getLogoData();net=data.convnet;终止作用data=getLogoData()如果~isfile(“LogoNet.mat”)网址='//www.tatmou.com/金宝appsupportfiles/gpucoder/cnn_models/logo_detection/LogoNet.mat'; 韦伯萨夫(“LogoNet.mat”,网址);终止数据=负载(“LogoNet.mat”);终止

加载预训练网络。

snet=getlogonnetwork();
snet=SeriesNetwork,属性:Layers:[22×1 nnet.cnn.layer.layer]InputNames:{'imageinput'}OutputNames:{'classoutput'}

定义用于量化的校准和验证数据。

校准数据用于收集网络卷积层和完全连接层中权重和偏差的动态范围以及网络所有层中激活的动态范围。为了获得最佳量化结果,校准数据必须代表网络的输入。

验证数据用于量化后的网络测试,以了解网络中量化卷积层的有限范围和精度的影响。

此示例使用中的图像logos\u数据集数据集。定义一个增强图像数据存储对象来调整网络数据的大小。然后,将数据拆分为校准和验证数据集。

curDir=pwd;newDir=fullfile(matlabroot、,“例子”,“深度学习共享”,“数据”,“logos_dataset.zip”);复制文件(newDir,curDir);解压缩(“logos_dataset.zip”); imageData=imageDatastore(完整文件(curDir,“logos\u数据集”),...“包含子文件夹”符合事实的“文件扩展名”,“.JPG”,“标签源”,“foldernames”);[calibrationData,validationData]=splitEachLabel(imageData,0.5,“随机化”);

创建一个数字量化器对象并指定要量化的网络。

dlQuantObj=dlquantizer(snet,“执行环境”,“FPGA”);

使用校准函数用于使用样本输入练习网络并收集范围信息校准函数练习网络,并收集网络卷积层和完全连接层中的权重和偏差的动态范围,以及网络所有层中激活的动态范围。函数返回一个表。表的每一行包含优化网络的可学习参数的范围信息rk。

dlQuantObj.calibrate (calibrationData)
目前,UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU“权重”—0.048978 0.039352{conv_1_Bias'}{conv_1'}“Bias”0.99996 1.0028{conv_2_Weights'}{conv_2'}“权重”0.0.055518 0.0.055518 0.0.055518 0.0.055 5 5.5 5 5 5 0.5 5 5 18 0.5 5 5 18 0.0 0 0.5 5 5 5 5 18 0.5 5 5 5 5 5 5 5 5 5 0.5 5 5 5 5 5 0 0 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0037892{'fc_1_Weights'}{'fc_1'}“Weights”0.00052319 0.00084454 0.000844 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 imageinput'}{'imageinput'}“激活”0 255{'imageinput_normalization'}{'imageinput'}“激活”-139.34 198.72

使用目标设备的自定义名称和接口创建目标对象,以将目标设备连接到主机。接口选项为JTAG和Ethernet。要创建目标对象,请输入:

hTarget=dlhdl.Target(“英特尔”,“界面”,“JTAG”);

定义用于比较量化前后网络行为的度量函数。将此函数保存在本地文件中。

作用精度=HcomputeModelAccurance(预测核心、网络、数据存储)%%HcomputeModelAccurance测试辅助函数计算模型级精度统计信息%MathWorks,Inc.版权所有。%装载地面真相groundTruth=数据存储。标签;%将预测标签与实际地面真实值进行比较predictionError={};对于idx=1:numel(groundTruth)[~,idy]=max(predictionScores(idx,:);yActual=net.Layers(end.class)(idy);predictionError{end+1}=(yActual==groundTruth(idx));%#嗯终止%将所有预测误差相加。predictionError=[predictionError{:}];精度=sum(predictionError)/numel(predictionError);终止

指定度量函数中的度量值DLQ量化选项对象。

选择= dlquantizationOptions (“MetricFcn”,...{@(x)hComputeModelAccurance(x,snet,validationData)},“比特流”,“arria10soc_int8”,...“目标”,hTarget);

要编译和部署量化网络,请运行验证委员会的职能数字量化器对象使用验证函数对网络的卷积层中的可学习参数进行量化,并对网络进行锻炼。该函数使用compile函数的输出,利用编程文件对FPGA板进行编程。它还下载了网络权重和偏差。deploy功能检查Intel Quartus工具和支持的工具版本。金宝app然后它通过使用sof文件开始对FPGA设备编程,显示进度消息,以及部署网络所需的时间。中定义的度量函数DLQ量化选项目的比较量化前后的网络结果。

预测=dlQuantObj.validate(validationData,选项);
(U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U 0“8.0 MB”FCWeightDataOffset“0x08000000”“12.0 MB”“内偏移”“0x08c00000”“总计:140.0 MB“#####使用JTAG编程FPGA位流…###FPGA位流编程已成功完成将重量加载到Conv处理器。###已加载Conv砝码。当前时间是2020年7月16日12:45:10################将权重加载到FC处理器已加载FC权重。当前时间是2020年7月16日12:45:26######完成输入激活的编写。#运行单输入激活。深度学习处理器探查器性能结果LastLayerLatency(周期)LastLayerLatency(秒)FramesUMM总延迟帧/秒-------------------------网络13570959 0.09047 30 380609145 11.8转换模块12667786 0.08445转换1 3938907 0.02626 maxpool转换1 1544560.01030转换2 2910954 0.01941 maxpool转换2 577524 0.00385转换3 2552707 0.01702 maxpool转换4 455440.00304 maxpool转换4 112510.00008 fc_模块903173 0.00602 fc_1 536164 0.00357 fc_2 342643 0.00228 fc_3 24364 0.00016*DL处理器的时钟频率为:150MHz####完成输入激活写入。#运行单输入激活。深度学习处理器探查器性能结果LastLayerLatency(周期)LastLayerLatency(秒)FramesUMM总延迟帧/秒-------------------------网络13570364 0.09047 30 380612682 11.8转换模块12667103 0.08445转换1 3939296 0.02626最大池1 1544371 0.01030转换2 2910747 0.01940最大池2 577654 0.00385转换3 2551829 0.01701最大池1转换4 455396 0.00304最大池4 113550.00008 fc_模块903261 0.00602 fc_1 536206 0.00357 fc_2 342688 0.00228 fc_3 24365 0.00016*DL处理器的时钟频率为:150MHz#####完成写入输入激活。#运行单输入激活。深度学习处理器探查器性能结果LastLayerLatency(周期)LastLayerLatency(秒)FramesUMM总延迟帧/秒-------------------------网络13571561 0.09048 30 380608338 11.8转换模块12668340 0.08446转换1 3939070 0.02626 maxpool转换1 1545327 0.01030转换2 2911061 0.01941 maxpool转换2 577557 0.00385转换3 2552082 0.01701 maxpool转换3 676506 0.004582 0.004582 maxpool转换4 112480.00007 fc_模块903221 0.00602 fc_1 536167 0.00357 fc_2 342643 0.00228 fc_3 24409 0.00016*DL处理器的时钟频率为:150MHz#####完成写入输入激活。#运行单输入激活。深度学习处理器探查器性能结果LastLayerLatency(周期)LastLayerLatency(秒)FramesUMM总延迟帧/秒------------------------------网络13569862 0.09047 30 380613327 11.8转换模块12666756 0.08445转换1 3939212 0.02626最大池容量1 1543267 0.01029转换2 2911184 0.01941最大池容量2 577275 0.00385转换3 2552868 0.01702最大池容量4 45533 0.00304最大池容量4 112520.00008 fc_模块903106 0.00602 fc_1 536050 0.00357 fc_2 342645 0.00228 fc_3 24409 0.00016*DL处理器的时钟频率为:150MHz#####完成写入输入激活。#运行单输入激活。深度学习处理器探查器性能结果LastLayerLatency(周期)LastLayerLatency(秒)FramesUM总延迟帧数/秒------------------------------网络13570823 0.09047 30 380619836 11.8转换模块12667607 0.08445转换1 3939074 0.02626 maxpool转换1 1544519 0.01030转换2 2910636 0.01940 maxpool转换2 577769 0.00385转换3 2551800 0.01701 maxpool转换4 455859 0.003480.0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0.0 0 0 0 0.0 0 0 0.0 0 0 0.0 0 0.0 0 0.0 0 0.0.0 0.0.0 0.0 0 0.0 0.0 0.0 0.0 0 0.0 0 0.0 0.0 0 0.0 0 0.0 0.0 0 0 0.0 0.0 0.0 0.7 7 7 7 7 7 7 7 7 7 7 7 7.0.0 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.7 7 7 7 7 7 7 7 7 7 7 7的功能模块的功能模块的功能模块的功能模块的功能模块的功能模块的功能模块的功能模块0x00000000“48.0 MB”输出结果偏移量0x03000000“4.0 MB”系统缓冲偏移量“0x03400000”“60.0 MB”“指令数据偏移量”“0x07000000”“8.0 MB”“ConvWeightDataOffset”“0x07800000”“8.0 MB”“FCWeightDataOffset”“0x08000000”“12.0 MB”“EndOffset”“0x08c00000”“总计:140.0 MB”####已跳过FPGA位流编程,因为相同的位流已加载到目标FPGA上已跳过深度学习网络编程,因为相同的网络已加载到目标FPGA上已完成输入激活的编写运行单输入激活。深度学习处理器探查器性能结果LastLayerLatency(周期)LastLayerLatency(秒)Frames平均总延迟帧数/秒-------------------------网络13572329 0.09048 10 127265075 11.8 conv_module 12669135 0.08446 conv_1 3939559 0.02626 maxpool_1 1545378 0.01030 conv_2 2911243 0.01941 maxpool_2 577422 0.00385 conv_3 2552064 0.01701 maxpool_3 676678 0.00451 conv_4 455657 0.00304 maxpool_4 11227 0.00007 fc_module 903194 0.00602 fc_1 536140 0.00357 fc_2 342688 0.00228 fc_3 24364 0.00016 * The clock frequency of the DL processor is: 150MHz ### Finished writing input activations. ### Running single input activations. Deep Learning Processor Profiler Performance Results LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s ------------- ------------- --------- --------- --------- Network 13572527 0.09048 10 127266427 11.8 conv_module 12669266 0.08446 conv_1 3939776 0.02627 maxpool_1 1545632 0.01030 conv_2 2911169 0.01941 maxpool_2 577592 0.00385 conv_3 2551613 0.01701 maxpool_3 676811 0.00451 conv_4 455418 0.00304 maxpool_4 11348 0.00008 fc_module 903261 0.00602 fc_1 536205 0.00357 fc_2 342689 0.00228 fc_3 24365 0.00016 * The clock frequency of the DL processor is: 150MHz

检查测量结果验证输出的字段,以查看量化网络的性能。

validateOut=预测.MetricResults.Result
ans=网络实现MetricOutput{uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

检查量化网络FPS验证输出的字段,以查看量化网络的每秒帧数性能。

预测。量化网络fps
ans=11.8126

中指定的网络卷积层的权重、偏差和激活数字量化器对象现在使用缩放的8位整数数据类型。

这个例子展示了如何量化神经网络卷积层中的可学习参数,并对量化后的网络进行了验证。利用MATLAB仿真对量化网络进行快速原型,验证量化网络的有效性。对于这种类型的模拟,您不需要原型制作过程中的硬件FPGA板。在本例中,您量化了LogoNet神经网络。

对于本例,您需要下面列出的产品下载188bet金宝搏FPGA在里面量化工作流先决条件.

加载预训练网络并分析网络结构。

snet=getLogoNetwork;分析网络(snet);
LogoNet网络体系结构

定义用于量化的校准和验证数据。

此示例使用logos\u数据集数据集。该数据集由320个图像组成。每个图像的大小为227×227,并有三个颜色通道(RGB)。创建一个增强图像数据存储用于校准和验证的对象。通过将校准数据集减少到20幅图像,加快校准和验证过程。验证量化网络时,MATLAB仿真工作流的最大限制为5幅图像。将验证数据集大小减少到5幅图像。

curDir=pwd;newDir=fullfile(matlabroot、,“例子”,“深度学习共享”,“数据”,“logos_dataset.zip”);复制文件(newDir、curDir、,“f”); 解压(“logos_dataset.zip”); imageData=imageDatastore(完整文件(curDir,“logos\u数据集”),...“包含子文件夹”符合事实的“文件扩展名”,“.JPG”,“标签源”,“foldernames”);[calibrationData,validationData]=splitEachLabel(imageData,0.5,“随机化”);calibrationData_reduced = calibrationData.subset (1:20);validationData_reduced = validationData.subset (1:5);

使用以下命令创建量化网络:数字量化器要使用MATLAB仿真环境,请将“仿真”设置为“开”。

dlQuantObj=dlquantizer(snet,“执行环境”,“FPGA”,“模拟”,“开”)

使用校准函数使用样本输入练习网络,并收集范围信息校准函数练习网络,并收集网络卷积层和完全连接层中权重和偏差的动态范围,以及网络所有层中激活的动态范围。calibrate函数返回一个表。表的每一行包含量化网络的可学习参数的范围信息。

dlQuantObj.校准(校准数据减少)
“35×5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4权重-0.048978 0.039352{'conv_1_Bias'}{'conv_1'Bias'}{'conv_1'Bias'0.99996 1.0028{'conv_2'Weights'}{'conv_2'}“Weights”0.0.055518 0.0.055518 0.0.055518 0.0.055 5 5.5 5 5 5 0.5 5 5 18 0.5 5 5 18 0.0 0 0.5 5 5 5 5 18 0.5 5 5 5 5 5 5 5 5 5 0.5 5 5 5 5 5 0 0 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0037892{'fc_1_Weights'}{'fc_1'}“Weights”0.00052319 0.00084454 0.000844 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 imageinput'}{'imageinput'}“激活”0 255“激活”1.11{{{Conv1}“激活”1{{{Conv1}“激活”1{{{Conv1}“激活”1{{{Conv1}“激活”1.1{{1.1{{{{图像输入的“正常化”1{{{{图像输入的“正常化”1{{{门市输入”1{{1}{1}“激活”1{1.1}“激活”1.11{{{{{1.1.1}“激活”1}”1.11{{1.11{{{1.1.1}“激活”1.11{{1}”1}“激活”1.11{{{1{1{1.11{1.1}”1}“激活”1{{1.1}“1}”1.11}“激活”1.11{1{{{{1.11}“1}2'}“激活”0 466 6.4{{Conv3{{3}{{3}{{3}{{{maxpopool{2{{{{maxpopool{2}{{{maxpool{2}}“激活”0 466 6.4{{{3}{{3}{3}{3}{3}“激活”5.6 300.6 300.6 300.65{{{3 3 300.6 300.6 300.6 300.65{{{{{{{{{{{{{3{3{3{{3 3{3{3{3{3{3{3.6 300.6 300.6 300.6 300.6 300.6 300.6 300.6 300.6 300.65{{{{{{{{{{{{3{{{3{3{{3{3{3{U 4'}“激活”0 209.11(7)7.114{{{{0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 7 7 7.114{{{{{{0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 7 7 7 7 7 5 7 7 7 7 5 7 7 7 7 7 5 7 7 5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 5 5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7“激活”1.4971e-22 1

设置目标度量函数并创建一个DLQ量化选项对象,该对象具有目标度量函数和验证数据集。在本例中,目标度量函数计算前5名精度。

选择= dlquantizationOptions (“MetricFcn”,{@(x)hComputeAccuracy(x,snet,validationData_reduced)});

笔记

如果未指定自定义度量函数,则将使用默认度量函数进行验证。使用MATLAB时,默认度量函数最多使用验证数据存储中的5个文件®已选择模拟环境。自定义度量函数没有此限制。

使用验证函数量化网络卷积层中的可学习参数。这个验证函数在MATLAB中模拟量化网络验证函数使用中定义的度量函数DLQ量化选项对象将单个数据类型网络对象的结果与量化网络对象的结果进行比较。

预测=dlQuantObj.validate(验证数据减少,选项)
###注意:(第1层)类型为“nnet.cnn.Layer.ImageInputLayer”的“imageinput”层在软件中实现。###注意:(第2层)类型为“nnet.cnn.Layer.RegressionOutputLayer”的“OutImageInput”层在软件中实现。编译段:conv_1>>maxpool_4…###注意:(第1层)类型为“nnet.cnn.layer.ImageInputLayer”的层“imageinput”在软件中实现。###注意:(第14层)类型为“nnet.cnn.layer.RegressionOutputLayer”的层“output”在软件中实现。编译段:conv_1>>maxpool_4…完成。编译段:fc_1>>fc#3…##注意:(第1层)类型为“nnet.cnn.layer.ImageInputLayer”的层“maxpool_4”在软件中实现。####注意:(第7层)类型为“nnet.cnn.layer.RegressionOutputLayer”的层“output”在软件中实现。编译段:fc_1>>fc_3…完成。####不应在此处输入。这意味着在MATLAB仿真中未对组件进行说明。####注意:(第1层)类型为“nnet.cnn.layer.ImageInputLayer”的层“fc#3”在软件中实现。##注意:(第2层)类型为“nnet.cnn.Layer.SoftmaxLayer”的层“softmax”在软件中实现。####注意:(第3层)类型为“nnet.cnn.Layer.ClassificationOutputLayer”的层“classoutput”在软件中实现。预测=带字段的结构:NumSamples:5 MetricResults:[1×1 struct]

检查测量结果验证输出的字段,以查看量化网络的性能。

validateOut=预测.MetricResults.Result
validateOut=2×2表网络实现MetricOutput{uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

输入参数

全部崩溃

数字量化器对象,指定要量化的网络。

用于量化网络验证的数据,指定为图像数据存储对象,一个增强图像数据存储对象,或像素标签图像数据存储对象。

用于量化网络的选项,指定为DLQ量化选项对象。

输出参数

全部崩溃

网络量化的结果,作为结构返回。结构包含以下字段。

  • 数字样本—用于验证网络的样本输入数量。

  • 度量结果–包含中定义的度量函数结果的结构DLQ量化选项对象中指定了多个度量函数时DLQ量化选项对象,度量结果是一个结构数组。

    度量结果包含这些字段。

领域 描述
度量函数 用来确定量化网络性能的函数。函数中指定DLQ量化选项对象。
后果

表示量化前后度量函数结果的表。

表中的第一行包含原始浮点实现的信息。第二行包含量化实现的信息。度量函数的输出显示在MetricOutput

在R2020a中引入