Main Content

activations

计算深度学习网络层激活

说明

您可以在 CPU 或 GPU 上计算深度学习网络层激活。使用 GPU 需要 Parallel Computing Toolbox™ 许可证和受支持的 GPU 设备。有关支持的设备的信息,请参阅 GPU Computing Requirements (Parallel Computing Toolbox)使用 ExecutionEnvironment 名称-值参数指定硬件要求。

要使用经过训练的 SeriesNetworkDAGNetwork 计算激活,请使用 activations 函数。要计算 dlnetwork 对象的激活,请使用 forwardpredict 函数,并指定 Outputs 选项。

act = activations(net,images,layer) 使用指定的图像返回名称或编号为 layer 的层的网络激活。

act = activations(net,sequences,layer) 使用指定的序列返回层的网络激活。

act = activations(net,features,layer) 使用指定的特征数据返回层的网络激活。

act = activations(net,X1,...,XN,layer) 使用多输入网络 net 的数值或元胞数组 X1、…、XN 中的数据返回层的网络激活。输入 Xi 对应于网络输入 net.InputNames(i)

act = activations(net,mixed,layer) 使用具有混合数据类型的多个输入的已训练网络 net 返回层的网络激活。

示例

act = activations(___,Name=Value) 返回网络激活,其中使用一个或多个名称-值对组参数来指定额外选项。例如,OutputAs="rows" 将激活输出格式指定为 "rows"。将此语法与上述语法中的任何输入参数结合使用。请在所有其他输入参数后指定名称-值参数。

示例

全部折叠

此示例说明如何从预训练的卷积神经网络中提取已学习的图像特征,并使用这些特征来训练图像分类器。

特征提取是使用预训练深度网络的表征能力的最简单最快捷的方式。例如,您可以使用 fitcecoc(Statistics and Machine Learning Toolbox™) 基于提取的特征来训练支持向量机 (SVM)。由于特征提取只需要遍历一次数据,因此如果没有 GPU 来加速网络训练,则不妨从特征提取开始。

加载数据

解压缩示例图像并加载这些图像作为图像数据存储。imageDatastore 根据文件夹名称自动标注图像,并将数据存储为 ImageDatastore 对象。通过图像数据存储可以存储大图像数据,包括无法放入内存的数据。将数据拆分,其中 70% 用作训练数据,30% 用作测试数据。

unzip("MerchData.zip");

imds = imageDatastore("MerchData", ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

[imdsTrain,imdsTest] = splitEachLabel(imds,0.7,"randomized");

这个非常小的数据集现在具有 55 个训练图像和 20 个验证图像。显示一些示例图像。

numImagesTrain = numel(imdsTrain.Labels);
idx = randperm(numImagesTrain,16);

I = imtile(imds,"Frames",idx);

figure
imshow(I)

加载预训练网络

加载一个预训练的 SqueezeNet 网络。SqueezeNet 已基于超过一百万个图像进行训练,可以将图像分为 1000 个对象类别(例如键盘、鼠标、铅笔和多种动物)。因此,该模型已基于大量图像学习了丰富的特征表示。

net = squeezenet;

分析网络架构。

analyzeNetwork(net)

2022-01-07_16-31-30.png

第一层(图像输入层)需要大小为 227×227×3 的输入图像,其中 3 是颜色通道数。

inputSize = net.Layers(1).InputSize
inputSize = 1×3

   227   227     3

提取图像特征

网络构造输入图像的分层表示。层越深,包含的特征级别就越高,这些层使用较浅层的较低级别特征构建而成。要获得训练图像和测试图像的特征表示,请对全局平均池化层 "pool10" 使用 activations。要获得图像的较低级别表示,请使用网络中较浅的层。

网络要求输入图像的大小为 227×227×3,但图像数据存储中的图像具有不同大小。要在将训练图像和测试图像输入到网络之前自动调整它们的大小,请创建增强的图像数据存储,指定所需的图像大小,并将这些数据存储用作 activations 的输入参数。

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);

layer = "pool10";
featuresTrain = activations(net,augimdsTrain,layer,OutputAs="rows");
featuresTest = activations(net,augimdsTest,layer,OutputAs="rows");

从训练数据和测试数据中提取类标签。

TTrain = imdsTrain.Labels;
TTest = imdsTest.Labels;

拟合图像分类器

使用从训练图像中提取的特征作为预测变量,并使用 fitcecoc (Statistics and Machine Learning Toolbox) 拟合多类支持向量机 (SVM)。

mdl = fitcecoc(featuresTrain,TTrain);

对测试图像进行分类

使用经过训练的 SVM 模型和从测试图像中提取的特征对测试图像进行分类。

YPred = predict(mdl,featuresTest);

显示四个示例测试图像及预测的标签。

idx = [1 5 10 15];
figure
for i = 1:numel(idx)
    subplot(2,2,i)
    I = readimage(imdsTest,idx(i));
    label = YPred(idx(i));
    
    imshow(I)
    title(label)
end

计算针对测试集的分类准确度。准确度是网络预测正确的标签的比例。

accuracy = mean(YPred == TTest)
accuracy = 0.9500

此 SVM 有很高的准确度。如果使用特征提取时的准确度不够高,则尝试迁移学习。

输入参数

全部折叠

经过训练的网络,指定为 SeriesNetworkDAGNetwork 对象。您可以通过导入预训练网络(例如,通过使用 googlenet 函数)或通过使用 trainNetwork 训练您自己的网络来获得经过训练的网络。

图像数据,指定为下列值之一。

数据类型描述用法示例
数据存储ImageDatastore保存在磁盘上的图像数据存储

使用保存在磁盘上的图像进行预测,其中图像的大小相同。

当图像大小不同时,使用 AugmentedImageDatastore 对象。

AugmentedImageDatastore应用随机仿射几何变换(包括调整大小、旋转、翻转、剪切和平移)的数据存储

使用保存在磁盘上的图像进行预测,这些图像的大小不同。

TransformedDatastore这类数据存储使用自定义变换函数变换从基础数据存储中读取的批量数据

  • 变换具有不受 activations 支持的输出的数据存储。

  • 将自定义变换应用于数据存储输出。

CombinedDatastore数据存储,它从两个或多个基础数据存储中读取数据

  • 使用具有多个输入的网络进行预测。

  • 组合来自不同数据源的预测变量。

自定义小批量数据存储返回小批量数据的自定义数据存储

使用其他数据存储不支持的格式的数据进行预测。

有关详细信息,请参阅Develop Custom Mini-Batch Datastore

数值数组指定为数值数组的图像使用可放入内存且不需要调整大小等额外处理的数据进行预测。
指定为表的图像使用存储在表中的数据进行预测。

当您将数据存储用于具有多个输入的网络时,该数据存储必须为 TransformedDatastoreCombinedDatastore 对象。

提示

对于图像序列(例如视频数据),请使用 sequences 输入参数。

数据存储

数据存储用于读取小批量的图像和响应值。当您的数据无法放入内存或要调整输入数据的大小时,请使用数据存储。

对于图像数据,下列数据存储直接与 activations 兼容:

提示

使用 augmentedImageDatastore 对要用于深度学习的图像进行高效预处理,包括调整图像大小。不要使用 ImageDatastore 对象的 ReadFcn 选项。

ImageDatastore 允许使用预取功能批量读取 JPG 或 PNG 图像文件。如果您将 ReadFcn 选项设置为自定义函数,则 ImageDatastore 不会预取,并且通常会明显变慢。

通过使用 transformcombine 函数,您可以使用其他内置数据存储进行预测。这些函数可以将从数据存储中读取的数据转换为 classify 所需的格式。

数据存储输出所需的格式取决于网络架构。

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

表或元胞数组,其中第一列指定预测变量。

表元素必须为标量、行向量或包含数值数组的 1×1 元胞数组。

自定义数据存储必须输出表。

data = read(ds)
data =

  4×1 table

        Predictors    
    __________________

    {224×224×3 double}
    {224×224×3 double}
    {224×224×3 double}
    {224×224×3 double}
data = read(ds)
data =

  4×1 cell array

    {224×224×3 double}
    {224×224×3 double}
    {224×224×3 double}
    {224×224×3 double}
多个输入

包含至少 numInputs 列的元胞数组,其中 numInputs 是网络输入数目。

numInputs 列指定每个输入的预测变量。

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

data = read(ds)
data =

  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 分别是图像的高度、宽度、深度和通道数

有关详细信息,请参阅Datastores for Deep Learning

数值数组

对于可放入内存并且不需要增强等额外处理的数据,您可以将图像数据集指定为数值数组。

数值数组的大小和形状取决于图像数据的类型。

数据格式
二维图像

h×w×c×N 数值数组,其中 h、w 和 c 分别是图像的高度、宽度和通道数,N 是图像的数量

三维图像h×w×d×c×N 数值数组,其中 h、w、d 和 c 分别是图像的高度、宽度和通道数,N 是图像的数量。

作为数据存储或数值数组的替代方法,您还可以在表中指定图像。

在表中指定图像时,表中的每行对应一个观测值。

对于图像输入,预测变量必须位于表的第一列,指定为以下项之一:

  • 图像的绝对或相对文件路径,指定为字符向量

  • 1×1 元胞数组,包含表示二维图像的 h×w×c 数值数组,其中 h、w 和 c 分别对应于图像的高度、宽度和通道数

提示

要将复数值数据输入到神经网络中,输入层的 SplitComplexInputs 选项必须为 1

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | table
复数支持:

序列或时间序列数据,指定为下列各项之一。

数据类型描述用法示例
数据存储TransformedDatastore这类数据存储使用自定义变换函数变换从基础数据存储中读取的批量数据

  • 变换具有不受 activations 支持的输出的数据存储。

  • 将自定义变换应用于数据存储输出。

CombinedDatastore数据存储,它从两个或多个基础数据存储中读取数据

  • 使用具有多个输入的网络进行预测。

  • 组合来自不同数据源的预测变量。

自定义小批量数据存储返回小批量数据的自定义数据存储

使用其他数据存储不支持的格式的数据进行预测。

有关详细信息,请参阅Develop Custom Mini-Batch Datastore

数值数组或元胞数组指定为数值数组的单个序列,或指定为由数值数组组成的元胞数组的序列数据集使用可放入内存且不需要自定义变换等额外处理的数据进行预测。

数据存储

数据存储读取若干小批量序列和响应。当您有无法放入内存的数据或要对数据应用变换时,请使用数据存储。

对于序列数据,下列数据存储直接与 activations 兼容:

通过使用 transformcombine 函数,您可以使用其他内置数据存储进行预测。这些函数可以将从数据存储中读取的数据转换为 activations 所需的表或元胞数组格式。例如,您可以分别使用 ArrayDatastoreTabularTextDatastore 对象变换和合并从内存数组和 CSV 文件中读取的数据。

数据存储必须以表或元胞数组的形式返回数据。自定义小批量数据存储必须输出表。

数据存储输出示例输出
data = read(ds)
data =

  4×2 table

        Predictors    
    __________________

    {12×50 double}
    {12×50 double}
    {12×50 double}
    {12×50 double}
元胞数组
data = read(ds)
data =

  4×2 cell array

    {12×50 double}
    {12×50 double}
    {12×50 double}
    {12×50 double}

预测变量的格式取决于数据的类型。

数据预测变量的格式
向量序列

c×s 矩阵,其中 c 是序列的特征数,s 是序列长度

一维图像序列

h×c×s 数组,其中 h 和 c 分别对应图像的高度和通道数,s 是序列长度。

小批量中的每个序列必须具有相同的序列长度。

二维图像序列

h×w×c×s 数组,其中 h、w 和 c 分别对应于图像的高度、宽度和通道数,s 是序列长度。

小批量中的每个序列必须具有相同的序列长度。

三维图像序列

h×w×d×c×s 数组,其中 h、w、d 和 c 分别对应于图像的高度、宽度、深度和通道数,而 s 是序列长度。

小批量中的每个序列必须具有相同的序列长度。

对于表中返回的预测变量,元素必须包含数值标量、数值行向量或包含数值数组的 1×1 元胞数组。

有关详细信息,请参阅Datastores for Deep Learning

数值数组或元胞数组

对于可放入内存并且不需要自定义变换等额外处理的数据,可以将单个序列指定为数值数组,或将序列数据集指定为由数值数组组成的元胞数组。

对于元胞数组输入,元胞数组必须为由数值数组组成的 N×1 元胞数组,其中 N 是观测值数目。表示序列的数值数组的大小和形状取决于序列数据的类型。

输入描述
向量序列c×s 矩阵,其中 c 是序列的特征数,s 是序列长度
一维图像序列h×c×s 数组,其中 h 和 c 分别对应于图像的高度和通道数,而 s 是序列长度
二维图像序列h×w×c×s 数组,其中 h、w 和 c 分别对应于图像的高度、宽度和通道数,s 是序列长度。
三维图像序列h×w×d×c×s,其中 h、w、d 和 c 分别对应于三维图像的高度、宽度、深度和通道数,s 是序列长度

提示

要将复数值数据输入到神经网络中,输入层的 SplitComplexInputs 选项必须为 1

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | cell
复数支持:

特征数据,指定为下列各项之一。

数据类型描述用法示例
数据存储TransformedDatastore这类数据存储使用自定义变换函数变换从基础数据存储中读取的批量数据

  • 变换具有不受 activations 支持的输出的数据存储。

  • 将自定义变换应用于数据存储输出。

CombinedDatastore数据存储,它从两个或多个基础数据存储中读取数据

  • 使用具有多个输入的网络进行预测。

  • 组合来自不同数据源的预测变量。

自定义小批量数据存储返回小批量数据的自定义数据存储

使用其他数据存储不支持的格式的数据进行预测。

有关详细信息,请参阅Develop Custom Mini-Batch Datastore

指定为表的特征数据使用存储在表中的数据进行预测。
数值数组指定为数值数组的特征数据使用可放入内存且不需要自定义变换等额外处理的数据进行预测。

数据存储

数据存储读取小批量的特征数据和响应。当您有无法放入内存的数据或要对数据应用变换时,请使用数据存储。

对于特征数据,下列数据存储直接与 activations 兼容:

通过使用 transformcombine 函数,您可以使用其他内置数据存储进行预测。这些函数可以将从数据存储中读取的数据转换为 activations 所需的表或元胞数组格式。有关详细信息,请参阅Datastores for Deep Learning

对于具有多个输入的网络,数据存储必须为 TransformedDatastoreCombinedDatastore 对象。

数据存储必须以表或元胞数组的形式返回数据。自定义小批量数据存储必须输出表。数据存储输出的格式取决于网络架构。

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

包含至少一列的表或元胞数组,其中第一列指定预测变量。

表元素必须为标量、行向量或包含数值数组的 1×1 元胞数组。

自定义小批量数据存储必须输出表。

对于具有一个输入的网络,输出的表为:

data = read(ds)
data =

  4×2 table

        Predictors    
    __________________

    {24×1 double}
    {24×1 double}
    {24×1 double}
    {24×1 double}

对于具有一个输入的网络,输出的元胞数组为:

data = read(ds)
data =

  4×1 cell array

    {24×1 double}
    {24×1 double}
    {24×1 double}
    {24×1 double}

多个输入层

包含至少 numInputs 列的元胞数组,其中 numInputs 是网络输入数目。

numInputs 列指定每个输入的预测变量。

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

对于具有两个输入的网络,输出的元胞数组为:

data = read(ds)
data =

  4×3 cell array

    {24×1 double}    {28×1 double}
    {24×1 double}    {28×1 double}
    {24×1 double}    {28×1 double}
    {24×1 double}    {28×1 double}

预测变量必须为 c×1 列向量,其中 c 是特征数。

有关详细信息,请参阅Datastores for Deep Learning

对于可放入内存且不需要自定义变换等其他处理的特征数据,可以将特征数据和响应指定为表。

表中的每行对应一个观测值。预测变量在表列中的排列取决于任务的类型。

任务预测变量
特征分类

在一列或多列中指定为标量的特征。

数值数组

对于可放入内存且不需要自定义变换等额外处理的特征数据,可以将特征数据指定为数值数组。

数值数组必须为 N×numFeatures 的数值数组,其中 N 是观测值数目,numFeatures 是输入数据的特征数。

提示

要将复数值数据输入到神经网络中,输入层的 SplitComplexInputs 选项必须为 1

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | table
复数支持:

对于具有多个输入的网络,该输入为数值或元胞数组。

对于图像、序列和特征预测变量输入,预测变量的格式必须分别与 imagessequencesfeatures 参数描述中所述的格式匹配。

有关如何训练具有多个输入的网络的示例,请参阅Train Network on Image and Feature Data

要将复数值数据输入到神经网络中,输入层的 SplitComplexInputs 选项必须为 1

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | cell
复数支持:

混合数据,指定为下列各项之一。

数据类型描述用法示例
TransformedDatastore这类数据存储使用自定义变换函数变换从基础数据存储中读取的批量数据

  • 使用具有多个输入的网络进行预测。

  • activations 不支持数据存储的变换输出,因此它们具有要求的格式。

  • 将自定义变换应用于数据存储输出。

CombinedDatastore数据存储,它从两个或多个基础数据存储中读取数据

  • 使用具有多个输入的网络进行预测。

  • 组合来自不同数据源的预测变量。

自定义小批量数据存储返回小批量数据的自定义数据存储

使用其他数据存储不支持的格式的数据进行预测。

有关详细信息,请参阅Develop Custom Mini-Batch Datastore

通过使用 transformcombine 函数,您可以使用其他内置数据存储进行预测。这些函数可以将从数据存储中读取的数据转换为 activations 所需的表或元胞数组格式。有关详细信息,请参阅Datastores for Deep Learning

数据存储必须以表或元胞数组的形式返回数据。自定义小批量数据存储必须输出表。数据存储输出的格式取决于网络架构。

数据存储输出示例输出

具有 numInputs 列的元胞数组,其中 numInputs 是网络输入的数目。

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

data = read(ds)
data =

  4×3 cell array

    {24×1 double}    {28×1 double}
    {24×1 double}    {28×1 double}
    {24×1 double}    {28×1 double}
    {24×1 double}    {28×1 double}

对于图像、序列和特征预测变量输入,预测变量的格式必须分别与 imagessequencesfeatures 参数描述中所述的格式匹配。

有关如何训练具有多个输入的网络的示例,请参阅Train Network on Image and Feature Data

提示

要将数值数组转换为数据存储,请使用 arrayDatastore

要从中提取激活值的层,指定为数值索引或字符向量。

要计算 SeriesNetwork 对象的激活,请使用其数值索引指定层,或指定为与层名称对应的字符向量。

要计算 DAGNetwork 对象的激活,请将层指定为与层名称对应的字符向量。如果层有多个输出,请将层和输出指定为层名称,后面依次跟字符“/”和层输出的名称。也就是说,layer 的形式为 'layerName/outputName'

示例: 3

示例: 'conv1'

示例: 'mpool/out'

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数后,但对各个参数对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: MiniBatchSize=256 将小批量大小指定为 256。

输出激活的格式,指定为 "channels""rows""columns"。有关输出格式的描述,请参阅 act

对于图像输入,如果 OutputAs 选项为 "channels",则输入数据中的图像可以大于网络的图像输入层的输入大小。对于其他输出格式,输入中的图像必须与网络的图像输入层的输入大小相同。

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

用于填充、截断或拆分输入序列的选项,指定为以下各项之一:

  • "longest" - 每个小批量中的填充序列具有与最长序列相同的长度。此选项不会丢弃任何数据,尽管填充会给神经网络引入噪声。

  • "shortest" - 截断每个小批量中的序列,使其长度与最短的序列相同。此选项确保不添加任何填充,但代价是丢弃数据。

  • 正整数 - 对于每个小批量,将序列填充到小批量中最长的序列的长度,然后将序列拆分为指定长度的较小序列。如果发生拆分,则软件会创建额外的小批量。如果指定的序列长度没有均分数据的序列长度,则对于包含这些序列最终时间步的小批量,其长度短于指定的序列长度。如果整个序列无法放入内存中,请使用此选项。您也可以尝试通过将 MiniBatchSize 选项设置为较低的值来减少每个小批量的序列数。

要了解有关填充、截断和拆分输入序列的效果的详细信息,请参阅序列填充、截断和拆分

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

用于填充输入序列的值,指定为标量。

不要用 NaN 填充序列,因为这样做会在整个神经网络中传播错误。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

  • "right" - 填充或截断右侧的序列。序列在相同的时间步开始,软件在序列的末尾截断或添加填充。

  • "left" - 填充或截断左侧的序列。软件会在序列的开头截断或添加填充,以便序列在同一时间步结束。

由于循环层一次处理一个时间步的序列数据,当循环层 OutputMode 属性为 "last" 时,最终时间步中的任何填充都会对层输出产生负面影响。要填充或截断左侧的序列数据,请将 SequencePaddingDirection 选项设置为 "left"

对于“序列到序列”神经网络(当每个循环层的 OutputMode 属性为 "sequence" 时),前几个时间步中的任何填充都会对较早时间步的预测产生负面影响。要填充或截断右侧的序列数据,请将 SequencePaddingDirection 选项设置为 "right"

要了解有关填充、截断和拆分输入序列的效果的详细信息,请参阅序列填充、截断和拆分

性能优化,指定为以下项之一:

  • "auto" - 自动应用适用于输入网络和硬件资源的多项优化。

  • "mex" - 编译并执行 MEX 函数。仅在使用 GPU 时,此选项才可用。使用 GPU 需要 Parallel Computing Toolbox 许可证和受支持的 GPU 设备。有关支持的设备的信息,请参阅 GPU Computing Requirements (Parallel Computing Toolbox)如果 Parallel Computing Toolbox 或合适的 GPU 不可用,则软件会返回错误。

  • "none" - 禁用所有加速。

如果 Acceleration"auto",则 MATLAB® 会应用许多兼容的优化,并且不生成 MEX 函数。

"auto""mex" 选项可以提供性能优势,但会增加初始运行时间。使用兼容参数的后续调用会更快。当您计划使用新输入数据多次调用函数时,请使用性能优化。

"mex" 选项根据函数调用中使用的网络和参数生成并执行 MEX 函数。您可以同时将多个 MEX 函数与单个网络相关联。清除网络变量也会清除与该网络相关联的所有 MEX 函数。

"mex" 选项支持包含Supported Layers (GPU Coder)页上列出的层的网络,但 sequenceInputLayer 对象除外。

当您使用单个 GPU 时,可以使用 "mex" 选项。

要使用 "mex" 选项,您必须安装 C/C++ 编译器和 GPU Coder™ Interface for Deep Learning 支持包。使用 MATLAB 中的附加功能资源管理器安装该支持包。有关设置说明,请参阅 MEX Setup (GPU Coder)。GPU Coder 不是必需的。

对于量化网络,"mex" 选项需要具有 6.1、6.3 或更高计算能力的支持 CUDA® 的 NVIDIA® GPU。

当您使用 "mex" 选项时,MATLAB Compiler™ 不支持部署网络。

硬件资源,指定为以下项之一:

  • "auto" - 如果有可用的 GPU,则使用 GPU;如果没有,则使用 CPU。

  • "gpu" - 使用 GPU。使用 GPU 需要 Parallel Computing Toolbox 许可证和受支持的 GPU 设备。有关支持的设备的信息,请参阅 GPU Computing Requirements (Parallel Computing Toolbox)如果 Parallel Computing Toolbox 或合适的 GPU 不可用,则软件会返回错误。

  • "cpu" - 使用 CPU。

  • "multi-gpu" - 在一台计算机上使用多个 GPU,根据您的默认集群配置文件使用本地并行池。如果当前没有并行池,软件将启动并行池,其池大小等于可用 GPU 的数量。

  • "parallel" - 根据您的默认集群配置文件使用本地或远程并行池。如果当前没有并行池,软件将使用默认集群配置文件启动一个并行池。如果池可以访问 GPU,则只有拥有唯一 GPU 的工作进程才能执行计算。如果该池没有 GPU,则将在所有可用的 CPU 工作进程上进行计算。

有关何时使用不同执行环境的详细信息,请参阅Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud

"gpu""multi-gpu""parallel" 选项需要 Parallel Computing Toolbox。要使用 GPU 进行深度学习,您还必须拥有支持的 GPU 设备。有关受支持设备的信息,请参阅GPU Computing Requirements (Parallel Computing Toolbox)如果您选择其中一个选项,而 Parallel Computing Toolbox 或合适的 GPU 不可用,则软件会返回错误。

要使用具有循环层的多个网络并行进行预测(通过将 ExecutionEnvironment 设置为 "multi-gpu""parallel"),SequenceLength 选项必须为 "shortest""longest"

如果网络的自定义层包含 State 参数,则该网络不支持并行进行预测。

输出参数

全部折叠

来自网络层的激活值,以数值数组或由数值数组组成的元胞数组的形式返回。act 的格式取决于输入数据的类型、层输出的类型以及指定的 OutputAs 选项。

图像或折叠序列输出

如果层输出的是图像或折叠序列数据,则 act 是一个数值数组。

OutputAsact
"channels"

对于二维图像输出,act 是一个 h×w×c×n 数组,其中 h、w 和 c 分别是所选层输出的高度、宽度和通道数,n 是图像的数量。在这种情况下,act(:,:,:,i) 包含第 i 个图像的激活。

对于三维图像输出,act 是一个 h×w×d×c×n 数组,其中 h、w、d 和 c 分别是所选层输出的高度、宽度、深度和通道数,n 是图像的数量。在这种情况下,act(:,:,:,:,i) 包含第 i 个图像的激活。

对于折叠的二维图像序列输出,act 是一个 h×w×c×(n*s) 数组,其中 h、w 和 c 分别是所选层输出的高度、宽度和通道数,n 是序列的数目,s 是序列长度。在这种情况下,act(:,:,:,(t-1)*n+k) 包含第 k 个序列的时间步 t 的激活。

对于折叠的三维图像序列输出,act 是一个 h×w×d×c×(n *s) 数组,其中 h、w、d 和 c 分别是所选层输出的高度、宽度、深度和通道数,n 是序列数,s 序列长度。在这种情况下,act(:,:,:,:,(t-1)*n+k) 包含第 k 个序列的时间步 t 的激活。

"rows"

对于二维和三维图像输出,act 是一个 n×m 矩阵,其中 n 是图像的数量,而 m 是层的输出元素数。在这种情况下,act(i,:) 包含第 i 个图像的激活。

对于折叠的二维和三维图像序列输出,act 是一个 (n *s)×m 矩阵,其中 n 是序列数,s 是序列长度,m 是来自层的输出元素数。在这种情况下,act((t-1)*n+k,:) 包含第 k 个序列的时间步 t 的激活。

"columns"

对于二维和三维图像输出,act 是一个 m×n 矩阵,其中 m 是所选层的输出元素数,n 是图像的数量。在这种情况下,act(:,i) 包含第 i 个图像的激活。

对于折叠的二维和三维图像序列输出,act 是一个 m×(n*s) 矩阵,其中 m 是所选层的输出元素数,n 是序列数,而 s 是序列长度。在这种情况下,act(:,(t-1)*n+k) 包含第 k 个序列的时间步 t 的激活。

序列输出

如果 layer 具有序列输出(例如,输出模式为 "sequence" 的 LSTM 层),则 act 是一个元胞数组。在这种情况下,"OutputAs" 选项必须为 "channels"

OutputAsact
"channels"

对于向量序列输出,act 是一个由 c×s 矩阵组成的 n×1 元胞数组,其中 n 是序列数,c 是序列中的特征数,s 是序列长度。

对于二维图像序列输出,act 是一个由 h×w×c×s 矩阵组成的 n×1 元胞数组,其中 n 是序列数,h、w 和 c 分别是图像的高度、宽度和通道数,s 是序列长度。

对于三维图像序列输出,act 是一个由 h×w×c×d×s 矩阵组成的 n×1 元胞数组,其中 n 是序列数,h、w、d 和 c 分别是图像的高度、宽度、深度和通道数,s 是序列长度。

在这些情况下,act{i} 包含第 i 个序列的激活。

特征向量和单个时间步输出

如果 layer 输出特征向量或序列的单个时间步(例如,输出模式为 "last" 的 LSTM 层),则 act 是一个数值数组。

OutputAsact
"channels"

对于包含向量数据的特征向量或单个时间步,act 是一个 c×n 矩阵,其中 n 是观测值数目,c 是特征数。

对于包含二维图像数据的单个时间步,act 是一个 h×w×c×n 数组,其中 n 是序列数,h、w 和 c 分别是图像的高度、宽度和通道数。

对于包含三维图像数据的单个时间步,act 是一个 h×w×c×d×n 数组,其中 n 是序列数,h、w、d 和 c 分别是图像的高度、宽度、深度和通道数。

"rows"n×m 矩阵,其中 n 是观测值数目,m 是所选层的输出元素数。在这种情况下,act(i,:) 包含第 i 个序列的激活。
"columns"m×n 矩阵,其中 m 是所选层的输出元素数,n 是观测值数目。在这种情况下,act(:,i) 包含第 i 个图像的激活。

算法

全部折叠

浮点算术

当您使用 trainnettrainNetwork 函数训练神经网络时,或当您对 DAGNetworkSeriesNetwork 对象使用预测或验证函数时,软件会使用单精度浮点算术来执行这些计算。用于预测和验证的函数包括 predictclassifyactivations。当您使用 CPU 和 GPU 来训练神经网络时,软件将使用单精度算术。

可再现性

为了提供最优性能,在 MATLAB 中使用 GPU 的深度学习不保证是确定性的。根据您的网络架构,在某些情况下,当使用 GPU 训练两个相同的网络或使用相同的网络和数据进行两次预测时,您可能会得到不同结果。

扩展功能

版本历史记录

在 R2016a 中推出

全部展开