计算深度学习网络层激活
您可以在CPU或GPU上计算深度学习网络层激活。使用GPU需要并行计算工具箱™和CUDA®启用nvidia.®GPU具有计算能力3.0或更高。使用该硬件要求指定硬件要求execultenvironment.
名称值对参数。
此示例显示了如何从预折叠的卷积神经网络中提取学习的图像特征,并使用这些功能培训图像分类器。特征提取是使用预先使用的深网络代表性的最简单且最快的方法。例如,您可以使用支持向量机(SVM)使用万博1manbetxFitcecoc.
(统计和机器学习工具箱™)上提取的功能。因为特征提取只需要一个通过数据,所以如果您没有GPU以加速网络培训,则是一个很好的起点。
加载数据
解压缩并将样本图像加载为图像数据存储。imageageAtastore.
自动标签的图像基于文件夹名称和存储数据作为imageageAtastore.
目的。图像数据存储允许您存储大图像数据,包括不适合内存的数据。将数据拆分为70%的培训和30%的测试数据。
解压缩('merchdata.zip');imds = imageageatastore('merchdata'那......'insertumbfolders',真的,......'labelsource'那'foldernames');[imdsTrain, imdsTest] = splitEachLabel (imd, 0.7,'随机');
现在有55个训练图像和20个验证图像在这个非常小的数据集中。显示一些样本图像。
numImagesTrain =元素个数(imdsTrain.Labels);idx = randperm (numImagesTrain 16);为i = 1:16 i {i} = readimage(Imdstrain,Idx(i));结束图imshow(imtile(i))
负载净化网络
加载佩带的alexnet网络。如果是深度学习工具箱模型AlexNet网络万博1manbetx支持包未安装,则软件提供下载链接。AlexNet对100多万幅图像进行了训练,可以将图像分为1000个对象类别。例如,键盘、鼠标、铅笔和许多动物。因此,该模型学习了丰富的特征表示范围广泛的图像。
net=alexnet;
显示网络架构。网络有五个卷积层和三个完全连接的层。
Net.Layers.
ans=25x1层阵列,带层:1“数据”图像输入227x227x3图像,带“零中心”规格化2“conv1”卷积96 11x11x3卷积,带跨步[4]和填充[0 0 0 0]3“relu1”ReLU ReLU 4“norm1”交叉通道规格化每个元素5个通道交叉通道规格化5“pool1”最大池3x3最大池步幅[2 2]和填充[0 0 0 0 0]6'conv2'分组卷积2组128 5x5x48卷积,步幅[1]和填充[2 2 2]7'relu2'ReLU ReLU ReLU 8'norm2'跨通道归一化跨通道归一化每个元素5个通道9'pool2'最大池3x3最大池带步幅[2]和填充[0 0 0 0]10'conv3'卷积384 3x3x256带跨步[1 1]和填充[1 1 1 1]的卷积11'relu3'ReLU ReLU 12'conv4'分组卷积2组192 3xx192卷积带跨步[1 1 1]和填充[1 1 1 1 1 1]13'relu4'ReLU ReLU 14'conv5'分组卷积2组128 3xx192卷积带跨步[1]和填充[1 1 1 1 1 1 1 1 1 1 1 1]15'relu5'ReLU ReLU 16'pool5'最大池3x3最大池带跨步[2]和填充[0 0 0 0]17'fc6'完全连接4096完全连接层18'relu6'ReLU ReLU ReLU 19'drop6'辍学50%辍学20'fc7'完全连接4096完全连接层21'relu7'ReLU ReLU 22'drop7'辍学50%辍学23'fc8'完全连接1000完全连接层24“prob”Softmax Softmax 25“输出”分类输出crossentropyex与“tench”和999其他类别
第一层,图像输入层需要输入尺寸227-×227-×3的输入图像,其中3是颜色信道的数量。
InputSize = Net.Layers(1).InputSize
inputSize =1×3.227 227 3.
提取图像特征
该网络构造输入图像的分层表示。更深层的层包含使用较早层的较低级别的较低级别构造的更高级别的功能。要获取培训和测试图像的特征表示,请使用激活
在完全连接的层上'fc7'
.要获得图像的较低级别表示,请使用网络中的早期图层。
网络需要大小为227×227×3的输入图像,但图像数据存储中的图像大小不同。要在将培训和测试图像输入网络之前自动调整其大小,请创建增强图像数据存储,指定所需的图像大小,并将这些数据存储用作激活
.
augimdsTrain=增强的图像数据存储(输入大小(1:2),imdsTrain);augimdtest=增强的图像数据存储(inputSize(1:2),imdsTest);层='fc7';featurestrain =激活(net,augimdstrain,图层,“OutputAs”那'行');FeatureStest =激活(NET,AUGIMDST,图层,“OutputAs”那'行');
从训练和测试数据中提取类标签。
ytrain = imdstrain.labels;ytest = imdstest.labels;
适合图像分类器
使用从训练图像中提取的功能作为预测变量,并使用多键支持向量机(SVM)使用万博1manbetxFitcecoc.
(统计和机器学习工具箱)。
mdl=fitcecoc(特征菌株,YTrain);
测试图像进行分类
使用培训的SVM模型和从测试图像中提取的功能进行分类测试图像。
Ypred =预测(MDL,Featustestest);
显示四个样本测试图像与他们的预测标签。
Idx = [1 5 10 15];数字为i = 1:numel(idx)子图(2,2,i)i = ReadImage(IMDSTEST,IDX(I));标签= ypred(idx(i));imshow(i)标题(标签)结束
计算测试集的分类准确性。准确性是网络正确预测的标签的分数。
精度=均值(Ypred == ytest)
精度=1
这种SVM精度高。如果使用特征提取足够高的精度不足,则尝试转移学习。
网
-训练有素的网络系列网络
目的|Dagnetwork.
目的训练有素的网络,指定为a系列网络
或者一个Dagnetwork.
目的。您可以通过导入佩带的网络(例如,使用)来获得培训的网络水壶
功能)或通过训练自己的网络使用trainNetwork
.
IMDS.
-图像数据存储imageageAtastore.
目的图像数据存储,指定为imageageAtastore.
目的。
imageageAtastore.
允许使用预取批量读取JPG或PNG图像文件。如果您使用自定义函数来读取图像,那么imageageAtastore.
不预取。
DS.
-数据存储数据存储空间用于内存数据和预处理。数据存储必须返回表中的数据或单元格数组。数据存储量输出的格式取决于网络架构。
网络架构 | 数据存储输出 | 示例输出 |
---|---|---|
单个输入 | 表或单元格数组,第一列指定预测器。 表元素必须是包含数字数组的标量,行向量或1×1个单元阵列。 自定义数据存储必须输出表。 |
数据=读取(ds) 数据= 4×1表预测器__________________ {224×224×3 double} {224×224×3双} {224×224×3双} {224×224×3双} |
数据=读取(ds) data = 4×1 cell array {224×224×3 double} {224×224×3 double} {224×224×3双} {224×224×3双} |
||
多个输入 | 单元格阵列至少具有 第一 输入的顺序由 |
数据=读取(ds) data = 4×2 cell array {224×224×3 double} {128×128×3 double} {224×224×3 double} {128×128×3双} {224×224×3双} {128×128×3双} {224×224×3双} {128×128×3双} |
预测值的格式取决于数据的类型。
数据 | 格式的预测 |
---|---|
2-D图像 | H-经过-W.-经过-C数字数组,其中H那W., 和C分别为图像的高度、宽度和通道数量。 |
三维图像 | H-经过-W.-经过-D.-经过-C数字数组,其中H那W.那D., 和C是图像的高度,宽度,深度和图像的通道数。 |
矢量序列 | C-经过-S.矩阵,其中C是序列的特征数量S.是序列长度。 |
二维图像序列 | H-经过-W.-经过-C-经过-S.阵列,其中H那W., 和C分别对应图像的高度、宽度和通道数量,和S.是序列长度。 迷你批处理中的每个序列必须具有相同的序列长度。 |
3-D图像序列 | H-经过-W.-经过-D.-经过-C-经过-S.阵列,其中H那W.那D., 和C分别对应图像的高度、宽度、深度和通道数量,和S.是序列长度。 迷你批处理中的每个序列必须具有相同的序列长度。 |
特征 | C-1栏载体,在哪里C是功能的数量。 |
有关详细信息,请参阅深入学习的数据购物.
X
-图像或特征数据图像或特征数据,指定为数字数组。数组的大小取决于输入的类型:
输入 | 描述 |
---|---|
二维图像 | 一种H-经过-W.-经过-C-经过-N数字数组,其中H那W., 和C是图像的高度,宽度和图像的频道数量,以及N为图像的个数。 |
3-D图像 | 一种H-经过-W.-经过-D.-经过-C-经过-N数字数组,其中H那W.那D., 和C图像的高度、宽度、深度和通道数量分别是和吗N为图像的个数。 |
特征 | 一种N-经过-numfeatures. 数字数组,其中N是观察人数和numfeatures. 为输入数据的特征个数。 |
如果阵列包含南
s、 然后它们通过网络传播。
对于具有多个输入的网络,可以指定多个数组X1
、……XN
哪里N
是网络输入数和输入数吗席
对应网络输入net.InputNames(我)
.
对于图像输入,如果是“OutputAs”
选择是'频道'
,然后输入数据中的图像X
可以大于网络的图像输入层的输入大小。对于其他输出格式,图像中的图像X
必须与网络的图像输入层的输入大小相同。
序列
-序列或时间序列数据序列或时间序列数据,指定为一个N-1个数字阵列的1个单元阵列,其中N是观察的数量,表示单个序列或数据存储的数字数组。
对于单元阵列或数字阵列输入,包含序列的数字阵列的尺寸取决于数据的类型。
输入 | 描述 |
---|---|
向量序列 | C-经过-S.矩阵,C是序列的特征数,以及S.是序列长度。 |
2-D图像序列 | H-经过-W.-经过-C-经过-S.阵列,在哪里H那W., 和C对应于图像的高度,宽度和数量,以及S.是序列长度。 |
三维图像序列 | H-经过-W.-经过-D.-经过-C-经过-S.哪里H那W.那D., 和C对应于3-D图像的高度,宽度,深度和数量,以及S.是序列长度。 |
对于数据存储区输入,数据存储必须将数据返回为序列的单元格数组或第一列包含序列的表。序列数据的尺寸必须对应于上表。
TBL.
-图像或特征数据表表格
图像或特征数据表。表中的每一行对应一个观察值。
表列中的预测器的排列取决于输入数据的类型。
输入 | 预测因子 |
---|---|
图像数据 |
在单个列中指定预测器。 |
特性数据 | 数字标量。 指定预测 |
这个参数支持只有一个输入的网万博1manbetx络。
数据类型:表格
层
-层提取激活分层以从指定为数字索引或字符向量的激活。
计算a的激活系列网络
对象,使用其数字索引指定图层,或者作为与图层名称对应的字符向量。
计算a的激活Dagnetwork.
对象,将图层指定为与图层名称对应的字符向量。如果图层具有多个输出,请指定图层并作为图层名称输出,然后是字符“/”,后跟图层输出的名称。那是,层
是表格'layername / outputname'
.
例子:3.
例子:“conv1”
例子:'mpool / out'
指定可选的逗号分隔的对名称,值
论点。名称
参数名和价值
是相应的价值。名称
必须出现在引号内。可以以任意顺序指定多个名称和值对参数name1,value1,...,namen,valuen
.
激活(净,X,层,“OutputAs”,“行”)
'minibatchsize'
-mini-batches大小用于预测的小批次的大小,指定为正整数。更大的小批量需要更多内存,但可能导致更快的预测。
例子:“MiniBatchSize”,256
“SequenceLength”
-用于填充、截断或拆分输入序列的选项'最长'
(默认)|“最短”
|正整数选项要填充,截断或拆分输入序列,指定为以下之一:
'最长'
-每个小批量中的Pad序列与最长序列具有相同的长度。此选项不会丢弃任何数据,但填充会给网络带来噪声。
“最短”
- 截断每个小批处理中的序列与最短序列具有相同的长度。此选项可确保在丢弃数据的成本下添加填充。
正整数 - 对于每个小批次,填充序列到最接近的指定长度的倍数大于小批次中最长的序列长度,然后将序列分成规定长度的较小序列。如果发生拆分,则软件会创建额外的百分之批处理。如果完整序列不适合内存,请使用此选项。或者,尝试通过设置序列减少每百分之批次的序列数'minibatchsize'
值较低的值。
要了解有关填充,截断和拆分输入序列的影响,请参阅序列填充,截断和分裂.
例子:'Sequencelength','最短'
“SequencePaddingValue”
-填充输入序列的值填充输入序列的值,指定为标量。该选项仅在何时有效SequenceLength
是'最长'
或正整数。不要用垫缝南
,因为这样做可以在整个网络中传播错误。
例子:'sequencdpaddingsvalue', - 1
“SequencePaddingDirection”
-填充或截断的方向'对'
(默认)|'剩下'
填充或截断的方向,指定为以下之一:
'对'
- 右侧的垫或截断序列。该序列在同一时间步骤开始,软件截断或将填充添加到序列的末尾。
'剩下'
- 左侧或截断序列。该软件截断或将填充添加到序列的开始,使序列同时结束。
因为LSTM层次处理序列数据一次一次步骤,当图层时OutputMode.
属性是'最后的'
,最终时间步骤中的任何填充都可以对图层输出产生负面影响。键入或截断左侧的序列数据,设置“SequencePaddingDirection”
选择'剩下'
.
用于序列到序列网络(当OutputMode.
属性是“序列”
对于每个LSTM层),在第一次步骤中的任何填充都可以对较早时间步长的预测产生负面影响。键入或截断右侧序列数据,请设置“SequencePaddingDirection”
选择'对'
.
要了解有关填充,截断和拆分输入序列的影响,请参阅序列填充,截断和分裂.
'加速'
-性能优化'汽车'
(默认)|'mex'
|“没有”
性能优化,指定为逗号分隔对组成'加速'
和以下之一:
'汽车'
- 自动应用适合输入网络和硬件资源的许多优化。
'mex'
- 编译并执行MEX功能。仅使用GPU时可用此选项。使用GPU需要并行计算工具箱和CUDA启用的NVIDIA GPU,其中计算能力3.0或更高。如果不可用并行计算工具箱或合适的GPU,则软件返回错误。
“没有”
- 禁用所有加速度。
默认选项是'汽车'
.如果'汽车'
被指定,matlab®将应用许多兼容的优化。如果你使用'汽车'
选项,MATLAB永远不会生成MEX函数。
使用'加速'
选择权'汽车'
和'mex'
可以提供绩效福利,但牺牲了增加的初始运行时间。具有兼容参数的后续调用更快。使用新输入数据计划多次调用函数时,使用性能优化。
这'mex'
选项基于函数调用中使用的网络和参数生成并执行MEX函数。您可以一次使用与单个网络相关联的多个MEX函数。清除网络变量还清除与该网络相关联的任何MEX功能。
这'mex'
选项仅在使用GPU时可用。您必须安装一个C/ c++编译器和GPU编码器™接口的深度学习库支持包。万博1manbetx在MATLAB中使用Ad万博1manbetxd-On Explorer安装支持包。有关安装说明,请参见墨西哥人设置(GPU编码器).不需要GPU编码器。
这'mex'
选项不支持所有层。有关受支持图层万博1manbetx的列表,请参见万博1manbetx支撑层(GPU编码器).包含a的经常性神经网络(RNN)sequenceInputlayer.
不受支持。万博1manbetx
这'mex'
选项不支持具有多个输入图层或多个万博1manbetx输出层的网络。
你不能使用MATLAB编译器™使用时部署网络'mex'
选项。
例子:'加速','mex'
'executionenvironment'
-硬件资源'汽车'
(默认)|'GPU'
|'中央处理器'
硬件资源,指定为逗号分隔对组成'executionenvironment'
和以下之一:
'汽车'
-使用GPU(如果有);否则,请使用CPU。
'GPU'
- 使用GPU。使用GPU需要并行计算工具箱和CUDA启用的NVIDIA GPU,其中计算能力3.0或更高。如果不可用并行计算工具箱或合适的GPU,则软件返回错误。
'中央处理器'
- 使用CPU。
例子:'executionenvironment','cpu'
行为
—来自网络层的激活从网络层的激活,返回为数字阵列或数字阵列的小区阵列。格式行为
取决于输入数据的类型,层输出的类型,以及“OutputAs”
选项。
如果该层输出图像或折叠序列数据,则行为
是一个数字数组。
“OutputAs” |
行为 |
---|---|
'频道' |
对于2-D图像输出, 对于3-D图像输出, 对于折叠的2-D图像序列输出, 对于折叠的三维图像序列输出, |
'行' |
对于二维和三维图像输出, 对于折叠的2-D和3-D图像序列输出, |
'列' |
对于二维和三维图像输出, 对于折叠的2-D和3-D图像序列输出, |
如果层
具有序列输出(例如,具有输出模式的LSTM层“序列”
)那么行为
是单元格数组。在这种情况下“OutputAs”
选项必须是'频道'
.
“OutputAs” |
行为 |
---|---|
'频道' |
对于向量序列输出, 对于2-D图像序列输出, 对于3-D图像序列输出, 在这些情况下, |
如果层
输出序列的单个时间步长(例如,具有输出模式的LSTM层'最后的'
)那么行为
是一个数字数组。
“OutputAs” |
行为 |
---|---|
'频道' |
对于包含载体数据的单个时间步, 对于包含二维图像数据的单个时间步长, 对于包含三维图像数据的单个时间步长, |
'行' |
N.-经过-m矩阵,其中N.是观察次数,以及m 是所选层的输出元素的数量。在这种情况下,行为(我,:) 包含激活的激活一世 序列。 |
'列' |
m-经过-N.矩阵,其中m是所选图层的输出元素的数量,以及N.是观察人数。在这种情况下,法案(:,i) 包含激活的激活一世 图象。 |
深度学习培训,预测和验证的所有功能,深度学习工具箱™使用单精度浮点算术执行计算。深度学习的功能包括trainNetwork
那预测
那分类
, 和激活
.当您使用CPU和GPU培训网络时,该软件使用单精度算术。
[1] M. Kudo,J. Toyama和M. Shimbo。“使用过度区域的多维曲线分类。”模式识别字母.卷。20,第11-13页,第1103-1111页。
[2]UCI机器学习存储库:日语元音数据集.https://archive.ics.uci.edu/ml/datasets/japanese+vowels.
使用说明和限制:
输入X
不得有变量大小。大小必须在代码生成时间固定。
这层
参数必须是不变的。
只有“OutputAs”
支持名称值对参数。万博1manbetx价值必须是'频道'
.
有关为深度学习神经网络生成代码的更多信息,请参阅使用MATLAB编码器进行深度学习代码的工作流程(MATLAB编码器).
使用说明和限制:
GPU代码生成支持以下语法:万博1manbetx
动作=激活(网络,x,图层)
行动=激活(净、序列、层)
行动=激活(__、名称、值)
输入X
不得有变量大小。输入的大小必须在代码生成时间固定。
CUDNN库支持向量和2-D图像序列万博1manbetx。TensorR库仅支持载体输入序列。万博1manbetx手臂®计算库
对于GPU不支持经常性网络。万博1manbetx
对于向量序列输入,在代码生成期间必须是常数的特征数量。序列长度可以是可变的尺寸。
对于图像序列输入,在代码生成期间,通道的高度、宽度和数量必须是一个常量。
这层
参数必须在代码生成期间为常量。
只有“OutputAs”
那'minibatchsize'
那“SequenceLength”
那“SequencePaddingDirection”
, 和“SequencePaddingValue”
代码生成支持名称-值对参数。所有名称-值对都必须是编译时常量万博1manbetx。
输出激活的格式必须是'频道'
.
只有'最长'
和“最短”
选项“SequenceLength”
代码生成支持名称值对。万博1manbetx
图形处理器的GPU代码生成激活
函数支持定义为半精万博1manbetx度浮点数据类型的输入。有关详细信息,请参阅一半
(GPU编码器).
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。