计算深度学习网络层激活
您可以在CPU或GPU上计算深度学习网络层激活。使用GPU需要并行计算工具箱™和CUDA®使英伟达®GPU具有3.0或更高的计算能力。方法指定硬件要求ExecutionEnvironment
名称-值对参数。
这个例子展示了如何从预先训练的卷积神经网络中提取学习到的图像特征,并使用这些特征训练图像分类器。特征提取是利用预训练深度网络的表征能力最简单、最快的方法。例如,您可以训练支持向量机(SVM)使用金宝appfitcecoc
(统计和机器学习工具箱™)提取的特征。因为特征提取只需要通过一次数据,如果您没有GPU来加速网络训练,那么这是一个很好的起点。
加载数据
解压缩示例映像并将其作为映像数据存储加载。imageDatastore
根据文件夹名称自动标记图像,并将数据存储为ImageDatastore
对象。映像数据存储使您可以存储大型映像数据,包括无法装入内存的数据。将数据分成70%的训练数据和30%的测试数据。
解压缩(“MerchData.zip”);imds = imageDatastore(“MerchData”,...“IncludeSubfolders”,真的,...“LabelSource”,“foldernames”);[imdsTrain,imdsTest] = splitEachLabel(imds,0.7,“随机”);
在这个非常小的数据集中,现在有55张训练图像和20张验证图像。显示一些示例图像。
numImagesTrain = numel(imdsTrain.Labels);idx = randperm(numImagesTrain,16);为i = 1:16 i {i} = readimage(imdsTrain,idx(i));结束图imshow (imtile(我))
负载预训练网络
加载一个预先训练的AlexNet网络。如果深度学习工具箱模型为AlexNet网络金宝app支持包未安装,则该软件提供下载链接。AlexNet训练了超过100万张图片,可以将图片分类为1000个对象类别。例如,键盘、鼠标、铅笔和许多动物。因此,该模型学习了广泛的图像的丰富特征表示。
Net = alexnet;
显示网络架构。该网络有五个卷积层和三个完全连接层。
网层
带有图层的图层数组:227 x227x3数据的图像输入图像的zerocenter正常化2 conv1卷积96年11 x11x3旋转步[4 4]和填充[0 0 0 0]3‘relu1 ReLU ReLU 4 norm1的横通道正常化横通道正常化与5频道/元素5“pool1”马克斯池3 x3马克斯池步(2 - 2)和填充[0 0 0 0]6“conv2”分组卷积2组128 5 x5x48旋转步[1]和填充(2 2 2 2)7的relu2 ReLU ReLU 8 norm2交叉道标准化交叉道正常化与5频道/元素9“pool2”马克斯池3 x3马克斯池步[2 2]和填充[0 0 0 0]10 conv3卷积384 3 x3x256旋转步[1]和填充[1 1 1 1]11的relu3 ReLU ReLU 12“conv4”分组卷积2组192 3 x3x192旋转步[1]和填充[1 1 1 1]13的relu4 ReLU ReLU 14“conv5”分组卷积2组128 3 x3x192旋转步[1]和填充(1 1 1)15'relu5' ReLU ReLU 16 'pool5' Max Pooling 3x3 Max Pooling with stride [2 2] and padding [0 000] 17 'fc6'全连接4096全连接层18 'relu6' ReLU ReLU 19 'drop6' Dropout 50% Dropout 20 'fc7'全连接4096全连接层21 'relu7' ReLU ReLU 22 'drop7' Dropout 50% Dropout 23 'fc8'全连接1000全连接层24 'prob' Softmax Softmax 25 'output'分类输出crossentropyex与'tench'和999其他类
第一层是图像输入层,要求输入图像的大小为227 × 227 × 3,其中3是颜色通道的数量。
inputSize = net.Layers(1).InputSize
inputSize =1×3227 227 3
提取图像特征
该网络构建了输入图像的层次表示。更深的层包含更高级别的特性,这些特性是使用较早层的较低级别的特性构造的。要获得训练和测试图像的特征表示,请使用激活
在全连接层上“fc7”
.要获得图像的较低级别表示,请使用网络中的较早期层。
网络需要大小为227 × 227 × 3的输入图像,但是图像数据存储中的图像有不同的大小。若要在将训练和测试图像输入到网络之前自动调整它们的大小,请创建增强的图像数据存储,指定所需的图像大小,并使用这些数据存储作为输入参数激活
.
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);层=“fc7”;featuresTrain =激活(net,augimdsTrain,layer,“OutputAs”,“行”);featuresTest =激活(net,augimdsTest,layer,“OutputAs”,“行”);
从训练和测试数据中提取类标签。
YTrain = imdsTrain.Labels;YTest = imdste . labels;
适合图像分类器
利用从训练图像中提取的特征作为预测变量,拟合多类支持向量机(SVM)金宝appfitcecoc
(统计和机器学习工具箱)。
mdl = fitcecoc(featuresTrain,YTrain);
对测试图像进行分类
利用训练好的支持向量机模型和从测试图像中提取的特征对测试图像进行分类。
YPred = predict(mdl,featuresTest);
显示四个带有预测标签的样本测试图像。
Idx = [1 5 10 15];数字为i = 1:numel(idx) subplot(2,2,i) i = readimage(imdsTest,idx(i));label = YPred(idx(i));imshow (I)标题(标签)结束
计算测试集上的分类精度。准确性是网络正确预测的标签的比例。
精度=平均值(YPred == YTest)
精度= 1
该支持向量机具有较高的精度。如果使用特征提取的准确率不够高,那么可以尝试迁移学习。
网
- - - - - -训练网络SeriesNetwork
对象|DAGNetwork
对象训练过的网络,指定为SeriesNetwork
或者一个DAGNetwork
对象。可以通过导入预先训练的网络(例如,通过使用googlenet
功能)或通过训练自己的网络使用trainNetwork
.
洛桑国际管理发展学院
- - - - - -图像数据存储ImageDatastore
对象映像数据存储,指定为ImageDatastore
对象。
ImageDatastore
允许使用预取批量读取JPG或PNG图像文件。如果使用自定义函数读取图像,则ImageDatastore
不预取。
提示
使用augmentedImageDatastore
为深度学习的图像进行有效的预处理,包括图像调整。
请勿使用readFcn
选择imageDatastore
对于预处理或调整大小,此选项通常要慢得多。
ds
- - - - - -数据存储用于内存不足数据和预处理的数据存储。数据存储必须返回表或单元格数组中的数据。数据存储输出的格式取决于网络架构。
网络体系结构 | 数据存储输出 | 示例输出 |
---|---|---|
单输入 | 表或单元格数组,其中第一列指定预测器。 表元素必须是标量、行向量或包含数字数组的1 × 1单元格数组。 自定义数据存储必须输出表。 |
数据=读取(ds) data = 4×1表预测器__________________ {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double} |
数据=读取(ds) Data = 4×1 cell array {224×224×3 double} {224×224×3 double} {224×224×3 double} {224×224×3 double} |
||
多个输入 | 单元格数组至少 第一个 输入的顺序由 |
数据=读取(ds) 数据= 4×2 cell array {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3 double} |
预测器的格式取决于数据的类型。
数据 | 预测器的格式 |
---|---|
二维图像 | h——- - - - - -w——- - - - - -c数值数组,其中h,w,c分别是图像的高度、宽度和通道数。 |
三维图像 | h——- - - - - -w——- - - - - -d——- - - - - -c数值数组,其中h,w,d,c分别是图像的高度、宽度、深度和通道数。 |
向量序列 | c——- - - - - -年代矩阵,c序列的特征数和年代为序列长度。 |
二维图像序列 | h——- - - - - -w——- - - - - -c——- - - - - -年代数组,h,w,c分别对应于图像的高度、宽度和通道数,和年代为序列长度。 小批中的每个序列必须具有相同的序列长度。 |
三维图像序列 | h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代数组,h,w,d,c分别对应于图像的高度、宽度、深度和通道数,和年代为序列长度。 小批中的每个序列必须具有相同的序列长度。 |
特性 | c-by-1列向量,其中c就是特征的数量。 |
有关更多信息,请参见用于深度学习的数据存储.
X
- - - - - -图像或特征数据图像或特征数据,指定为数字数组。数组的大小取决于输入的类型:
输入 | 描述 |
---|---|
二维图像 | 一个h——- - - - - -w——- - - - - -c——- - - - - -N数值数组,其中h,w,c图像的高度、宽度和通道数是否分别为N是图像的数量。 |
三维图像 | 一个h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N数值数组,其中h,w,d,c图像的高度、宽度、深度和通道数是否分别为N是图像的数量。 |
特性 | 一个N——- - - - - -numFeatures 数值数组,其中N观察的次数和numFeatures 是输入数据的特征数。 |
如果数组包含南
S,然后它们通过网络传播。
对于有多个输入的网络,可以指定多个数组X1
、……XN
,在那里N
是网络的输入数和输入数西
对应于网络输入net.InputNames(我)
.
对于图像输入,如果“OutputAs”
选择是“渠道”
,则图像在输入数据X
可以大于网络图像输入层的输入大小。对于其他输出格式,格式中的图像X
必须与网络的图像输入层的输入大小相同。
序列
- - - - - -序列或时间序列数据序列或时间序列数据,用N-by-1单元格数组的数字数组,其中N是观察数、表示单个序列的数值数组或数据存储。
对于单元格数组或数值数组输入,包含序列的数值数组的尺寸取决于数据的类型。
输入 | 描述 |
---|---|
向量序列 | c——- - - - - -年代矩阵,c序列的特征数量和年代为序列长度。 |
二维图像序列 | h——- - - - - -w——- - - - - -c——- - - - - -年代数组,h,w,c分别对应于图像的高度、宽度和通道数,和年代为序列长度。 |
三维图像序列 | h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代,在那里h,w,d,c分别为三维图像的高度、宽度、深度和通道数,和年代为序列长度。 |
对于数据存储输入,数据存储必须以序列单元格数组或其第一列包含序列的表的形式返回数据。序列数据的尺寸必须与上表相对应。
资源描述
- - - - - -图像或特征数据表表格
图像或特征数据表。表中的每一行都对应一个观察结果。
预测器在表列中的排列取决于输入数据的类型。
输入 | 预测 |
---|---|
图像数据 |
在单个列中指定预测器。 |
特性数据 | 数字标量。 中指定预测器 |
此参数只支持单输入网络。金宝app
数据类型:表格
层
- - - - - -层提取激活层提取激活,指定为数值索引或字符向量。
计算a的活化SeriesNetwork
对象,使用它的数值索引指定层,或作为对应于层名的字符向量。
计算a的活化DAGNetwork
对象,指定该层作为对应于层名的字符向量。如果层有多个输出,指定层和输出作为层名,后面跟着字符“/”,然后是层输出的名称。也就是说,层
是这样的形式“layerName / outputName”
.
例子:3.
例子:“conv1”
例子:“mpool /出”
指定逗号分隔的可选对名称,值
参数。的名字
参数名称和价值
对应的值。的名字
必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
激活(净,X,层,“OutputAs”,“行”)
“MiniBatchSize”
- - - - - -小批次的尺寸用于预测的小批量的大小,指定为正整数。更大的迷你批处理大小需要更多的内存,但可以导致更快的预测。
例子:“MiniBatchSize”,256年
“SequenceLength”
- - - - - -填充、截断或分割输入序列的选项“最长”
(默认)|“最短”
|正整数填充、截断或分割输入序列的选项,指定为以下之一:
“最长”
-每个小批中的衬垫序列与最长序列的长度相同。这个选项不会丢弃任何数据,尽管填充会给网络带来噪音。
“最短”
-截断每个小批中的序列,使其长度与最短的序列相同。此选项确保不添加填充,但代价是丢弃数据。
正整数——对于每个小批处理,将序列填充到指定长度的最近倍数,该倍数大于小批处理中最长的序列长度,然后将序列分割为指定长度的更小的序列。如果发生分裂,那么软件会创建额外的小批量。如果完整序列不适合内存,则使用此选项。或者,尝试减少每个小批处理的序列数量“MiniBatchSize”
选项设置为较低的值。
要了解关于填充、截断和分割输入序列的效果的更多信息,请参见序列填充、截断和分割.
例子:“SequenceLength”、“最短的
“SequencePaddingValue”
- - - - - -值来填充输入序列用来填充输入序列的值,指定为标量。该选项仅在以下情况下有效SequenceLength
是“最长”
或者一个正整数。不垫序列用南
因为这样做会在整个网络中传播错误。
例子:“SequencePaddingValue”,1
“SequencePaddingDirection”
- - - - - -填充或截断的方向“对”
(默认)|“左”
填充或截断的方向,指定为下列之一:
“对”
-在右侧填充或截断序列。序列开始在同一时间步骤和软件截断或添加填充序列的结尾。
“左”
-在左侧填充或截断序列。该软件截断或添加填充序列的开始,以使序列结束在同一时间步骤。
因为LSTM层每次处理一个时间步骤的序列数据,当层OutputMode
属性是“最后一次”
,在最后的时间步长的任何填充都会对图层输出产生负面影响。若要在左侧填充或截断序列数据,请设置“SequencePaddingDirection”
选项“左”
.
对于序列到序列网络(当OutputMode
属性是“序列”
对于每个LSTM层),第一时间步中的任何填充都会对早期时间步的预测产生负面影响。若要在右侧填充或截断序列数据,请设置“SequencePaddingDirection”
选项“对”
.
要了解关于填充、截断和分割输入序列的效果的更多信息,请参见序列填充、截断和分割.
“加速”
- - - - - -性能优化“汽车”
(默认)|墨西哥人的
|“没有”
性能优化,指定为逗号分隔的对组成“加速”
和以下其中之一:
“汽车”
-自动应用一些适合输入网络和硬件资源的优化。
墨西哥人的
—编译并执行MEX函数。该选项仅在使用GPU时可用。使用GPU需要并行计算工具箱和CUDA支持的NVIDIA GPU,计算能力3.0或更高。如果并行计算工具箱或合适的GPU不可用,则软件返回一个错误。
“没有”
—禁用所有加速。
默认选项是“汽车”
.如果“汽车”
, MATLAB®将应用许多兼容的优化。如果您使用“汽车”
选项,MATLAB从未生成MEX函数。
使用“加速”
选项“汽车”
而且墨西哥人的
可以提供性能优势,但以增加初始运行时间为代价。使用兼容参数的后续调用会更快。当您计划使用新的输入数据多次调用函数时,请使用性能优化。
的墨西哥人的
选项根据函数调用中使用的网络和参数生成并执行MEX函数。您可以同时拥有与单个网络相关联的多个MEX函数。清除网络变量也会清除与该网络关联的任何MEX函数。
的墨西哥人的
选项仅在使用GPU时可用。你必须安装一个C/ c++编译器和GPU Coder™接口深度学习库支持包。金宝app在MATLAB中使用Ad金宝appd-On Explorer安装支持包。有关设置说明,请参见墨西哥人设置(GPU编码器).GPU Coder不需要。
的墨西哥人的
选项不支持所有层。金宝app有关受支持层的列表,请参见金宝app金宝app支持层(GPU编码器).循环神经网络(rnn)包含一个sequenceInputLayer
不受支持。金宝app
的墨西哥人的
选项不支持具有多个输入层或多个输金宝app出层的网络。
你不能使用MATLAB编译器™来部署您的网络墨西哥人的
选择。
例子:“加速”、“墨西哥人的
“ExecutionEnvironment”
- - - - - -硬件资源“汽车”
(默认)|“图形”
|“cpu”
硬件资源,用逗号分隔的对指定“ExecutionEnvironment”
和以下其中之一:
“汽车”
—如果有图形处理器,请使用;否则,请使用CPU。
“图形”
—使用GPU。使用GPU需要并行计算工具箱和CUDA支持的NVIDIA GPU,计算能力3.0或更高。如果并行计算工具箱或合适的GPU不可用,则软件返回一个错误。
“cpu”
—使用CPU。
例子:“ExecutionEnvironment”、“cpu的
行为
—网络层激活来自网络层的激活,作为数值数组或数值数组的单元格数组返回。的格式行为
取决于输入数据的类型、层输出的类型和“OutputAs”
选择。
如果该层输出图像或折叠序列数据,则行为
是一个数值数组。
“OutputAs” |
行为 |
---|---|
“渠道” |
对于二维图像输出, 对于3d图像输出, 对于折叠的二维图像序列输出, 对于折叠的三维图像序列输出, |
“行” |
对于二维和三维图像输出, 对于折叠的二维和三维图像序列输出, |
“列” |
对于二维和三维图像输出, 对于折叠的二维和三维图像序列输出, |
如果层
有序列输出(例如,LSTM层输出模式“序列”
),然后行为
是单元格数组。在这种情况下,“OutputAs”
选项必须为“渠道”
.
“OutputAs” |
行为 |
---|---|
“渠道” |
对于矢量序列输出, 对于二维图像序列输出, 对于三维图像序列输出, 在这些情况下, |
如果层
输出序列的单个时间步(例如,带有输出模式的LSTM层)“最后一次”
),然后行为
是一个数值数组。
“OutputAs” |
行为 |
---|---|
“渠道” |
对于包含矢量数据的单个时间步长, 对于包含二维图像数据的单个时间步长, 对于一个包含三维图像数据的时间步长, |
“行” |
n——- - - - - -米矩阵,n是观察的次数,和米 是所选层的输出元素的数量。在这种情况下,法案(我,:) 控件的激活我 序列。 |
“列” |
米——- - - - - -n矩阵,米从所选层的输出元素的数量,和n是观察数。在这种情况下,法》(:,我) 控件的激活我 th形象。 |
在深度学习工具箱™中,所有用于深度学习训练、预测和验证的功能都使用单精度浮点算法执行计算。深度学习的功能包括trainNetwork
,预测
,分类
,激活
.当你使用cpu和gpu训练网络时,该软件使用单精度算法。
[1]工藤先生,富山先生,Shimbo先生。“利用穿过区域的多维曲线分类”。模式识别信.第20卷第11-13期,第1103-1111页。
[2]UCI机器学习库:日语元音数据集.https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
使用注意事项和限制:
输入X
不能有可变的大小。大小必须在代码生成时固定。
的层
参数必须是恒定的。
只有“OutputAs”
支持名称-值对参数。金宝app取值必须为“渠道”
.
有关为深度学习神经网络生成代码的更多信息,请参见基于MATLAB Coder的深度学习代码生成工作流程(MATLAB编码器).
使用注意事项和限制:
GPU代码生成支持以下语法:金宝app
act = activation (net,X,layer)
Act =激活(网络,序列,层)
act = activations(__,名称,值)
输入X
不能有可变的大小。输入的大小必须在代码生成时固定。
cuDNN库支持向量和二维图像序列。金宝appTensorRT库只支持向量输入序列。金宝app手臂®计算库
for GPU不支持循环网络。金宝app
对于矢量序列输入,在代码生成过程中特征的数量必须是恒定的。序列长度可以可变大小。
对于图像序列输入,在代码生成期间,高度、宽度和通道数量必须是一个常数。
的层
参数在代码生成期间必须是常量。
只有“OutputAs”
,“MiniBatchSize”
,“SequenceLength”
,“SequencePaddingDirection”
,“SequencePaddingValue”
代码生成支持名称-值对参数。金宝app所有名称-值对必须是编译时常量。
输出激活的格式必须为“渠道”
.
只有“最长”
而且“最短”
选择“SequenceLength”
在代码生成中支持名称-值对。金宝app
GPU代码生成激活
函数支持定义为半精金宝app度浮点数据类型的输入。有关更多信息,请参见一半
(GPU编码器).
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。