主要内容

数字转换

数字转换深层神经网络

自从R2022a

描述

例子

quantizedNetwork=数字转换(quantObj)使用校准数字转换深神经网络dlquantizer对象,quantObj。量子神经网络对象,quantizedNetwork,使量化层的可见性、重量和偏见的网络,以及simulatable量子化的推理行为。

例子

quantizedNetwork=数字转换(quantObj,名称,值)指定附加选项使用一个或多个名称名称参数。

这个函数需要深度学习工具箱量化模型库。了解数字转换所需的产品深神经网络,看到s manbetx 845的量化工作流先决条件

例子

全部折叠

这个例子展示了如何创建一个目标不可知论者,simulatable量子化的深在MATLAB神经网络。

不可知论者量化目标可以让你看到效果量化你的神经网络没有目标硬件或有针对性的量化方案。创建一个目标无关的量化网络是有用的,如果你:

  • 没有访问你的目标硬件。

  • 想要预览您的网络是否适合量子化。

  • 想要找到层敏感的量化。

量化网络模拟量子化行为quantization-compatible层。网络体系结构层和原始网络连接是一样的,但是使用有限精度类型推理行为。一旦量化你的网络,您可以使用quantizationDetails函数来检索量子化的细节。

加载pretrained网络。是一个SqueezeNet网络已经重新训练使用转移学习分类图片MerchData数据集。

负载squeezenetmerch
网= DAGNetwork属性:层:[68×1 nnet.cnn.layer.Layer]连接:[75×2表]InputNames:{“数据”}OutputNames: {“new_classoutput”}

您可以使用quantizationDetails看到网络函数不是量子化的。

qDetailsOriginal = quantizationDetails(净)
qDetailsOriginal =结构体字段:IsQuantized: 0 TargetLibrary:“QuantizedLayerNames:[0×0的字符串]QuantizedLearnables:(0×3表)

解压并加载MerchData图像作为一种图像数据存储。

解压缩(“MerchData.zip”)imd = imageDatastore (“MerchData”,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);

为量化定义校准和验证数据使用。输出的图像大小改变对校准和验证数据根据网络需求。

[calData, valData] = splitEachLabel (imd, 0.7,“随机”);augCalData = augmentedImageDatastore ([227 - 227], calData);augValData = augmentedImageDatastore ([227 - 227], valData);

创建dlquantizer对象和指定网络数字转换。将MATLAB的执行环境。网络是如何量化取决于执行环境。MATLAB执行环境是不可知论者目标硬件和允许你原型量子化的行为。

quantObj = dlquantizer(网络,“ExecutionEnvironment”,MATLAB的);

使用校准功能锻炼与样本输入网络收集范围信息。的校准功能锻炼的网络和收集动态范围重量和偏见的卷积和完全连接层的网络和动态范围激活所有层的网络。函数返回一个表。表的每一行包含的范围信息可学的参数优化的网络。

calResults =校准(quantObj augCalData);

使用数字转换方法量化网络对象并返回一个simulatable量化网络。

qNet =数字转换(quantObj)
qNet =量子化DAGNetwork属性:层:[68×1 nnet.cnn.layer.Layer]连接:[75×2表]InputNames:{“数据”}OutputNames: {“new_classoutput”}使用quantizationDetails方法提取量子化的细节。

您可以使用quantizationDetails函数,网络现在是量子化的。

qDetailsQuantized = quantizationDetails (qNet)
qDetailsQuantized =结构体字段:IsQuantized: 1 TargetLibrary:“没有一个”QuantizedLayerNames:[26×1弦]QuantizedLearnables:[52×3表)

使用原作出预测,单精度浮点网络以及量化INT8网络。

predOriginal =分类(净,augValData);%经典的预测网络predQuantized =分类(qNet augValData);%的预测量化网络

计算相对精度的量化网络相比原来的网络。

ccrQuantized =意味着(predQuantized = = valData.Labels) * 100
ccrQuantized = 100
ccrOriginal =意味着(predOriginal = = valData.Labels) * 100
ccrOriginal = 100

对于这个验证数据集,量子化的网络给了相同的预测浮点网络。

这个例子展示了如何模拟量化GPU网络部署的行为。一旦你数字转换网络GPU执行环境,你可以模仿GPU目标行为没有GPU硬件。这样做允许您检查量化网络结构和行为没有生成代码的部署。

模拟量化网络不小于原来的网络。

加载pretrained网络。是SqueezeNet卷积神经网络已经重新训练使用转移学习分类图片MerchData数据集。

负载squeezenetmerchlgraph = layerGraph(净);lgraph = removeLayers (lgraph,“new_classoutput”);dlnet = dlnetwork (lgraph)
dlnet = dlnetwork属性:层:[67×1 nnet.cnn.layer.Layer]连接:[74×2表]可学的:[52×3表)状态:[0×3表]InputNames:{“数据”}OutputNames:{“概率”}初始化:1观点总结总结。

为量化定义校准和验证数据使用。

使用校准数据收集的动态范围重量和偏见的卷积和完全连接层的网络和动态范围激活所有层的网络。最好的量化结果,校准数据必须输入到网络的代表。

使用量化后的验证数据来测试网络理解的影响有限的范围和精度的量化卷积网络层。

对于这个示例,使用图像MerchData数据集。把数据分割成校准和验证数据集。

解压缩(“MerchData.zip”);imd = imageDatastore (“MerchData”,IncludeSubfolders = true,LabelSource =“foldernames”);类=类别(imds.Labels);[calData, valData] = splitEachLabel (imd, 0.7,“随机”);

创建一个dlquantizer对象和指定网络数字转换。网络是如何量化取决于执行环境。集ExecutionEnvironmentGPU特定于GPU目标硬件进行量化。

quantObj = dlquantizer (dlnet ExecutionEnvironment =“图形”);

使用校准功能锻炼与样本输入网络对象范围和收集信息。

calResults =校准(quantObj calData);

使用数字转换方法量化网络对象并返回一个simulatable量化网络。

qNet =数字转换(quantObj)
qNet =量子化dlnetwork属性:层:[67×1 nnet.cnn.layer.Layer]连接:[74×2表]可学的:[52×3表)状态:[0×3表]InputNames:{“数据”}OutputNames:{“概率”}初始化:1观点总结总结。使用quantizationDetails函数提取量子化的细节。

您可以使用quantizationDetails看到,网络现在是量子化的方法。

qDetails = quantizationDetails (qNet)
qDetails =结构体字段:IsQuantized: 1 TargetLibrary:“cudnn”QuantizedLayerNames:[55×1弦]QuantizedLearnables:[35×3表)

TargetLibrary字段显示,量化网络模拟CUDA®深层神经网络库(cuDNN)。

QuantizedLayerNames字段显示的层量子化的。

qDetails.QuantizedLayerNames (1:5)
ans =5×1的字符串“relu_conv1”“conv1 pool1”“fire2-squeeze1x1”“fire2-relu_squeeze1x1”

QuantizedLearnables字段包含更多细节量化网络可学的参数。在这个例子中,二维卷积的层,conv1,有重量和int8铸出。偏见了,仍在单精度。量化的值可学的是作为存储整数返回值。

qDetails.QuantizedLearnables
ans =35×3表层参数值_____________ _____ ___________________“conv1”“权重”{3×3×3×64 int8}“conv1”“偏见”{1×1×64单}“fire2-squeeze1x1”“权重”{1×1×64×16 int8}“fire2-squeeze1x1”“偏见”{1×1×16单}“fire2-expand1x1”“权重”{1×1×16×64 int8}“fire2-expand3x3”“权重”{3×3×16×64 int8}“fire3-squeeze1x1”“权重”{1×1×128×16 int8}“fire3-squeeze1x1”“偏见”{1×1×16单}“fire3-expand1x1”“权重”{1×1×16×64 int8}“fire3-expand3x3”“权重”{3×3×16×64 int8}“fire4-squeeze1x1”“权重”{1×1×128×32 int8}“fire4-squeeze1x1”“偏见”{1×1×32单}“fire4-expand1x1”“权重”{1×1×32×128 int8}“fire4-expand3x3”“权重”{3×3×32×128 int8}“fire5-squeeze1x1”“权重”{1×1×256×32 int8}“fire5-squeeze1x1”“偏见”{1×1×32单}⋮

您可以使用量化网络来模拟网络量化为GPU目标硬件如何执行一个分类任务。

使用原作出预测,单精度浮点网络。加快计算通过编译和执行一个墨西哥人函数GPU,使用加速度选项“墨西哥人”预测函数。

XTest = readall (valData);XTest =猫(4 XTest {:});XTest = dlarray (gpuArray(单(XTest)),“SSCB”);tt = valData.Labels;YTestOriginal =预测(dlnet、XTest、加速度=“墨西哥人”);
为cudnn生成墨西哥人的目标。
YTestOriginal = onehotdecode (YTestOriginal类3);

使用量化INT8网络作出预测。使用加速度选项“墨西哥人”预测函数。墨西哥人加速支持基于量化的量化网络对象万博1manbetxExecutionEnvironment设置为GPU

YTestQuantized =预测(qNet、XTest、加速度=“墨西哥人”);
为cudnn生成墨西哥人的目标。
YTestQuantized = onehotdecode (YTestQuantized类3);

计算相对精度的量化网络相比原来的网络。

ccrOriginal =意味着(挤压(YTestOriginal) = = valData.Labels)
ccrOriginal = 1
ccrQuantized =意味着(挤压(YTestQuantized) = = valData.Labels)
ccrQuantized = 1

量化网络没有精度下降。

这个例子显示了如何模仿行为量化网络的FPGA部署。一旦你数字转换网络的FPGA执行环境,你可以模仿FPGA目标行为没有任何FPGA硬件。这个动作可以让你检查你的量子化的网络结构和行为没有生成部署代码。

加载pretrained网络。

如果~ isfile (“LogoNet.mat”)url =“//www.tianjin-qmedu.com/万博1manbetxsupportfiles/gpucoder/cnn_models/logo_detection/LogoNet.mat”;websave (“LogoNet.mat”url);结束data =负载(“LogoNet.mat”);网= data.convnet;

为量化定义校准和验证数据使用。

使用校准数据收集的动态范围重量和偏见的卷积和完全连接层,激活所有的层的动态范围,和动态范围的参数层。最好的量化结果,校准数据必须输入到网络的代表。

使用验证数据来量化后的网络进行测试。测试网络确定的有限的范围和精度的影响量化层和网络层参数。

本例中使用的图像logos_dataset创建一个数据集imageDatastore对象,然后把数据分割成校准和验证数据集。

解压缩(“logos_dataset.zip”);imageData = imageDatastore (fullfile (pwd,“logos_dataset”),IncludeSubfolders = true, FileExtensions =“jpg”LabelSource =“foldernames”);[calData, valData] = splitEachLabel (imageData, 0.7,“随机”);

创建一个dlquantizer对象和指定网络数字转换。设置量化网络的执行环境FPGA

quantObj = dlquantizer(净,ExecutionEnvironment =“FPGA”);

使用校准功能锻炼与样本输入网络收集范围信息。

calResults =校准(quantObj calData UseGPU =“关闭”);

使用数字转换函数来量化网络对象并返回一个量化网络模拟。

qNet =数字转换(quantObj)
qNet =量子化DAGNetwork属性:层:[22 x1 nnet.cnn.layer.Layer]连接:[21 x2表]InputNames: {“imageinput”} OutputNames: {“classoutput”}使用quantizationDetails函数提取量子化的细节。

使用quantizationDetails方法提取量子化的细节。

您可以使用quantizationDetails函数来确认网络现在是量子化的。的TargetLibrary字段显示,量化网络模拟一个FPGA的目标。

qDetails = quantizationDetails (qNet)
qDetails =结构体字段:IsQuantized: 1 TargetLibrary:“fpga”QuantizedLayerNames: [17 x1字符串]QuantizedLearnables: [14 x3表)

QuantizedLayerNames字段显示量化层的列表。

qDetails.QuantizedLayerNames
ans =17 x1字符串“relu_1”“conv_1 maxpool_1”“conv_2”“relu_2”“maxpool_2”“conv_3”“relu_3”“maxpool_3”“conv_4”“relu_4”“maxpool_4”“fc_1”“relu_5”“fc_2”“relu_6”“fc_3”

QuantizedLearnables字段包含额外的细节量化网络可学的参数。在这个例子中,二维卷积层和完全连接层的权重比例和演员int8。偏差比例仍在int32。的quantizationDetails函数返回的值与存储整数值量化可学的。

qDetails.QuantizedLearnables
ans =14×3表层参数值________ _____ _____________________“conv_1”“权重”{5 x5x3x96 int8}“conv_1”“偏见”{1 x1x96 int32}“conv_2”“权重”{3 x3x96x128 int8}“conv_2”“偏见”{1 x1x128 int32}“conv_3”“权重”{3 x3x128x384 int8}“conv_3”“偏见”{1 x1x384 int32}“conv_4”“权重”{3 x3x384x128 int8}“conv_4”“偏见”{1 x1x128 int32}“fc_1”“权重”{5 x5x128x2048 int8}“fc_1”“偏见”{1 x1x2048 int32}“fc_2”“权重”{1 x1x2048x2048 int8}“fc_2”“偏见”{1 x1x2048 int32}“fc_3”“权重”{1 x1x2048x32 int8}“fc_3”“偏见”{1 x1x32 int32}

您可以使用量化网络来模拟一个网络量化为目标硬件FPGA执行分类任务。

ypred = qNet.classify (valData);ccr =意味着(ypred = = valData.Labels)
ccr = 1

输入参数

全部折叠

dlquantizer对象包含网络数字转换,校准使用校准对象的功能。的ExecutionEnvironment必须设置为“图形”FPGA的,或MATLAB的

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:quantizedNetwork =数字转换(quantObj“ExponentScheme”、“直方图”)

指数选择方案,指定这些值之一:

  • 极大极小的——评估指数基于标定的范围信息统计,避免溢出。

  • “直方图”——发布出去是依靠扩展指数的评估最适合校准数据。

例子:“ExponentScheme”、“直方图”

输出参数

全部折叠

量子神经网络,作为一个返回dlnetwork,DAGNetwork,yolov2ObjectDetector(计算机视觉工具箱),yolov3ObjectDetector(计算机视觉工具箱),yolov4ObjectDetector(计算机视觉工具箱),或者一个ssdObjectDetector(计算机视觉工具箱)对象。

限制

  • 数字转换功能不支持量化网络使用万博1manbetxdlquantizer对象与ExecutionEnvironment设置为“CPU”

  • 代码生成不支持量化深度产生的神经网络万博1manbetx数字转换函数。

版本历史

介绍了R2022a

全部展开