主要内容

激活

计算深度学习网络层激活

描述

您可以在CPU或GPU上计算深度学习网络层激活。使用GPU需要并行计算工具箱™和CUDA®启用nvidia.®GPU具有计算能力3.0或更高。使用该硬件要求指定硬件要求execultenvironment.名称值对参数。

行为=激活(IMDS.使用培训的网络返回特定层的网络激活以及图像数据存储中的图像数据IMDS.

行为=激活(DS.使用数据存储中的数据返回网络激活DS.

行为=激活(X使用数字数组中的图像或特征数据返回网络激活X

行为=激活(,x1,...,xn)返回数字阵列中数据的网络激活X1、……XN对于哑铃输入网络.输入对应网络输入net.InputNames(我)

行为=激活(序列返回循环网络(例如LSTM或GRU网络)的网络激活情况,其中序列包含序列或时间序列预测器。

行为=激活(TBL.使用表中的数据返回网络激活TBL.

例子

行为=激活(___名称,值返回具有由一个或多个名称-值对参数指定的附加选项的网络激活。例如“OutputAs”、“行”指定激活输出格式为'行'.在所有其他输入参数之后指定名称-值对参数。

例子

全部折叠

此示例显示了如何从预折叠的卷积神经网络中提取学习的图像特征,并使用这些功能培训图像分类器。特征提取是使用预先使用的深网络代表性的最简单且最快的方法。例如,您可以使用支持向量机(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精度高。如果使用特征提取足够高的精度不足,则尝试转移学习。

输入参数

全部折叠

训练有素的网络,指定为a系列网络或者一个Dagnetwork.目的。您可以通过导入佩带的网络(例如,使用)来获得培训的网络水壶功能)或通过训练自己的网络使用trainNetwork

图像数据存储,指定为imageageAtastore.目的。

imageageAtastore.允许使用预取批量读取JPG或PNG图像文件。如果您使用自定义函数来读取图像,那么imageageAtastore.不预取。

小费

使用增强图像数据存储用于高学习的图像高效预处理,包括图像调整大小。

不要使用readfcn.选择imageageAtastore.对于预处理或调整大小,这个选项通常非常慢。

数据存储空间用于内存数据和预处理。数据存储必须返回表中的数据或单元格数组。数据存储量输出的格式取决于网络架构。

网络架构 数据存储输出 示例输出
单个输入

表或单元格数组,第一列指定预测器。

表元素必须是包含数字数组的标量,行向量或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双}
多个输入

单元格阵列至少具有numInputs列,其中numInputs为网络输入的个数。

第一numInputs列为每个输入指定预测器。

输入的顺序由InputNames网络的属性。

数据=读取(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数字数组,其中HW., 和C分别为图像的高度、宽度和通道数量。

三维图像

H-经过-W.-经过-D.-经过-C数字数组,其中HW.D., 和C是图像的高度,宽度,深度和图像的通道数。

矢量序列

C-经过-S.矩阵,其中C是序列的特征数量S.是序列长度。

二维图像序列

H-经过-W.-经过-C-经过-S.阵列,其中HW., 和C分别对应图像的高度、宽度和通道数量,和S.是序列长度。

迷你批处理中的每个序列必须具有相同的序列长度。

3-D图像序列

H-经过-W.-经过-D.-经过-C-经过-S.阵列,其中HW.D., 和C分别对应图像的高度、宽度、深度和通道数量,和S.是序列长度。

迷你批处理中的每个序列必须具有相同的序列长度。

特征

C-1栏载体,在哪里C是功能的数量。

有关详细信息,请参阅深入学习的数据购物

图像或特征数据,指定为数字数组。数组的大小取决于输入的类型:

输入 描述
二维图像 一种H-经过-W.-经过-C-经过-N数字数组,其中HW., 和C是图像的高度,宽度和图像的频道数量,以及N为图像的个数。
3-D图像 一种H-经过-W.-经过-D.-经过-C-经过-N数字数组,其中HW.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.阵列,在哪里HW., 和C对应于图像的高度,宽度和数量,以及S.是序列长度。
三维图像序列 H-经过-W.-经过-D.-经过-C-经过-S.哪里HW.D., 和C对应于3-D图像的高度,宽度,深度和数量,以及S.是序列长度。

对于数据存储区输入,数据存储必须将数据返回为序列的单元格数组或第一列包含序列的表。序列数据的尺寸必须对应于上表。

图像或特征数据表。表中的每一行对应一个观察值。

表列中的预测器的排列取决于输入数据的类型。

输入 预测因子
图像数据
  • 图像的绝对或相对文件路径,在单个列中指定为字符向量

  • 指定为三维数字数组的图像

在单个列中指定预测器。

特性数据

数字标量。

指定预测numfeatures.表的列,其中numfeatures.为输入数据的特征个数。

这个参数支持只有一个输入的网万博1manbetx络。

数据类型:表格

分层以从指定为数字索引或字符向量的激活。

计算a的激活系列网络对象,使用其数字索引指定图层,或者作为与图层名称对应的字符向量。

计算a的激活Dagnetwork.对象,将图层指定为与图层名称对应的字符向量。如果图层具有多个输出,请指定图层并作为图层名称输出,然后是字符“/”,后跟图层输出的名称。那是,是表格'layername / outputname'

例子:3.

例子:“conv1”

例子:'mpool / out'

名称-值对的观点

指定可选的逗号分隔的对名称,值论点。名称参数名和价值是相应的价值。名称必须出现在引号内。可以以任意顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:激活(净,X,层,“OutputAs”,“行”)

输出激活格式,指定为逗号分隔对“OutputAs”和任何一种'频道''行', 要么'列'.有关不同输出格式的描述,请参见行为

对于图像输入,如果是“OutputAs”选择是'频道',然后输入数据中的图像X可以大于网络的图像输入层的输入大小。对于其他输出格式,图像中的图像X必须与网络的图像输入层的输入大小相同。

例子:“OutputAs”、“行”

用于预测的小批次的大小,指定为正整数。更大的小批量需要更多内存,但可能导致更快的预测。

例子:“MiniBatchSize”,256

选项要填充,截断或拆分输入序列,指定为以下之一:

  • '最长'-每个小批量中的Pad序列与最长序列具有相同的长度。此选项不会丢弃任何数据,但填充会给网络带来噪声。

  • “最短”- 截断每个小批处理中的序列与最短序列具有相同的长度。此选项可确保在丢弃数据的成本下添加填充。

  • 正整数 - 对于每个小批次,填充序列到最接近的指定长度的倍数大于小批次中最长的序列长度,然后将序列分成规定长度的较小序列。如果发生拆分,则软件会创建额外的百分之批处理。如果完整序列不适合内存,请使用此选项。或者,尝试通过设置序列减少每百分之批次的序列数'minibatchsize'值较低的值。

要了解有关填充,截断和拆分输入序列的影响,请参阅序列填充,截断和分裂

例子:'Sequencelength','最短'

填充输入序列的值,指定为标量。该选项仅在何时有效SequenceLength'最长'或正整数。不要用垫缝,因为这样做可以在整个网络中传播错误。

例子:'sequencdpaddingsvalue', - 1

填充或截断的方向,指定为以下之一:

  • '对'- 右侧的垫或截断序列。该序列在同一时间步骤开始,软件截断或将填充添加到序列的末尾。

  • '剩下'- 左侧或截断序列。该软件截断或将填充添加到序列的开始,使序列同时结束。

因为LSTM层次处理序列数据一次一次步骤,当图层时OutputMode.属性是'最后的',最终时间步骤中的任何填充都可以对图层输出产生负面影响。键入或截断左侧的序列数据,设置“SequencePaddingDirection”选择'剩下'

用于序列到序列网络(当OutputMode.属性是“序列”对于每个LSTM层),在第一次步骤中的任何填充都可以对较早时间步长的预测产生负面影响。键入或截断右侧序列数据,请设置“SequencePaddingDirection”选择'对'

要了解有关填充,截断和拆分输入序列的影响,请参阅序列填充,截断和分裂

性能优化,指定为逗号分隔对组成'加速'和以下之一:

  • '汽车'- 自动应用适合输入网络和硬件资源的许多优化。

  • '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(如果有);否则,请使用CPU。

  • 'GPU'- 使用GPU。使用GPU需要并行计算工具箱和CUDA启用的NVIDIA GPU,其中计算能力3.0或更高。如果不可用并行计算工具箱或合适的GPU,则软件返回错误。

  • '中央处理器'- 使用CPU。

例子:'executionenvironment','cpu'

输出参数

全部折叠

从网络层的激活,返回为数字阵列或数字阵列的小区阵列。格式行为取决于输入数据的类型,层输出的类型,以及“OutputAs”选项。

图像或折叠序列输出

如果该层输出图像或折叠序列数据,则行为是一个数字数组。

“OutputAs” 行为
'频道'

对于2-D图像输出,行为是一个H-经过-W.-经过-C-经过-N.阵列,其中HW., 和C所选图层的输出通道的高度、宽度和数量分别是多少N.为图像的个数。在这种情况下,法案(::,:我)包含激活的激活一世图象。

对于3-D图像输出,行为是一个H-经过-W.-经过-D.-经过-C-经过-N.阵列,其中HW.D., 和C所选图层的高度、宽度、深度和输出通道的数量分别是多少N.为图像的个数。在这种情况下,(:::::::我)包含激活的激活一世图象。

对于折叠的2-D图像序列输出,行为是一个H-经过-W.-经过-C-经过-(N.*S.)阵列,在哪里HW., 和C分别为所选层的输出通道的高度、宽度和数量,N.是序列的数量,和S.是序列长度。在这种情况下,法案(t-1)*n+k)包含时间步骤的激活T.K.序列。

对于折叠的三维图像序列输出,行为是一个H-经过-W.-经过-D.-经过-C-经过-(N.*S.)阵列,在哪里HW.D., 和C是所选层输出的高度,宽度,深度和通道数,N.是序列的数量,和S.是序列长度。在这种情况下,法案(::::::,(t-1)* n + k)包含时间步骤的激活T.K.序列。

'行'

对于二维和三维图像输出,行为是一个N.-经过-m矩阵,其中N.是图像的数量和m是来自图层的输出元素的数量。在这种情况下,行为(我,:)包含激活的激活一世图象。

对于折叠的2-D和3-D图像序列输出,行为是一个 (N.*S.)———m矩阵,其中N.为序列的个数,S.是序列长度,和m是来自图层的输出元素的数量。在这种情况下,法案((t-1)* n + k,:)包含时间步骤的激活T.K.序列。

'列'

对于二维和三维图像输出,行为是一个m-经过-N.矩阵,其中m是所选图层的输出元素的数量,以及N.为图像的个数。在这种情况下,法案(:,i)包含激活的激活一世图象。

对于折叠的2-D和3-D图像序列输出,行为是一个m-经过-(N.*S.)矩阵,在哪里m是所选图层的输出元素的数量,N.是序列的数量,和S.是序列长度。在这种情况下,法案(:,(t - 1) * n + k)包含时间步骤的激活T.K.序列。

序列输出

如果具有序列输出(例如,具有输出模式的LSTM层“序列”)那么行为是单元格数组。在这种情况下“OutputAs”选项必须是'频道'

“OutputAs” 行为
'频道'

对于向量序列输出,行为是一个N.- 1个单元阵列,的C-经过-S.矩阵,N.为序列的个数,C是序列中的功能数量,以及S.是序列长度。

对于2-D图像序列输出,行为是一个N.- 1个单元阵列,的H-经过-W.-经过-C-经过-S.矩阵,N.为序列的个数,HW., 和C是图像的高度,宽度和图像的通道数,以及S.是序列长度。

对于3-D图像序列输出,行为是一个N.- 1个单元阵列,的H-经过-W.-经过-C-经过-D.-经过-S.矩阵,N.为序列的个数,HW.D., 和C分别是图像的高度、宽度、深度和通道数,以及S.是序列长度。

在这些情况下,{i}包含对一世序列。

单时间级输出

如果输出序列的单个时间步长(例如,具有输出模式的LSTM层'最后的')那么行为是一个数字数组。

“OutputAs” 行为
'频道'

对于包含载体数据的单个时间步,行为是一个C-经过-N.矩阵,其中N.是序列数和C是序列中的要素数。

对于包含二维图像数据的单个时间步长,行为是一个H-经过-W.-经过-C-经过-N.阵列,其中N.为序列的个数,HW., 和C分别为图像的高度、宽度和通道数量。

对于包含三维图像数据的单个时间步长,行为是一个H-经过-W.-经过-C-经过-D.-经过-N.阵列,其中N.为序列的个数,HW.D., 和C分别为图像的高度、宽度、深度和通道数量。

'行' 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.

扩展能力

在R2016A介绍