Main Content

classify

(不推荐)使用经过训练的深度学习神经网络对数据进行分类

不建议使用 classify。请改用 minibatchpredictscores2label 函数。有关详细信息,请参阅版本历史记录

说明

您可以在 CPU 或 GPU 上使用经过训练的深度学习神经网络进行预测。使用 GPU 需要 Parallel Computing Toolbox™ 许可证和受支持的 GPU 设备。有关支持的设备的信息,请参阅 GPU 计算要求 (Parallel Computing Toolbox)使用 ExecutionEnvironment 名称-值参量指定硬件要求。

对于具有多个输出的网络,请改用 predict 函数并将 ReturnCategorical 选项设置为 true

Y = classify(net,images) 使用经过训练的网络 net 预测指定图像的类标签。

示例

Y = classify(net,sequences) 使用经过训练的网络 net 预测指定序列的类标签。

Y = classify(net,features) 使用经过训练的网络 net 预测指定特征数据的类标签。

Y = classify(net,X1,...,XN) 预测多输入网络 net 的数值数组或元胞数组 X1, …, XN 中数据的类标签。输入 Xi 对应于网络输入 net.InputNames(i)

Y = classify(net,mixed) 使用具有混合数据类型的多个输入的经过训练的网络 net 预测类标签。

[Y,scores] = classify(___) 还使用任何先前的输入参量返回与类标签对应的分类分数。

___ = classify(___,Name=Value) 使用由一个或多个名称-值参量指定的额外选项预测类标签。

提示

当您使用不同长度的序列进行预测时,小批量大小可能会影响添加到输入数据的填充量,从而导致不同的预测值。请尝试使用不同的值,看看哪个值最适合您的网络。要指定小批量大小和填充选项,请分别使用 MiniBatchSizeSequenceLength 选项。

示例

全部折叠

使用经过训练的卷积神经网络对图像进行分类

加载预训练的 SqueezeNet 神经网络。

net = squeezenet;

读取并显示一个示例图像。

I = imread("peppers.png");
figure
imshow(I)

Photograph of peppers

将图像大小调整为网络输入大小。

sz = net.Layers(1).InputSize;
I = imresize(I,sz(1:2));

对图像进行分类。

Y = classify(net,I)
Y = 

  categorical

     bell pepper 

输入参数

全部折叠

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

提示

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

数据存储

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

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

提示

使用 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× 数值数组,其中 hwc 分别是图像的高度、宽度和通道数。

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

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

数值数组

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

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

数据格式
二维图像

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

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

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

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

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

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

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

提示

此参量支持复数值预测变量。要将复数值数据输入到 SeriesNetworkDAGNetwork 对象中,输入层的 SplitComplexInputs 选项必须为 1 (true)。

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

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

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

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

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

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

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

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

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

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

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

数据存储

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

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

通过使用 transformcombine 函数,您可以使用其他内置数据存储进行预测。这些函数可以将从数据存储中读取的数据转换为 classify 所需的表或元胞数组格式。例如,您可以分别使用 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 数组,其中 hc 分别对应图像的高度和通道数,s 是序列长度。

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

二维图像序列

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

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

三维图像序列

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

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

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

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

数值数组或元胞数组

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

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

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

提示

此参量支持复数值预测变量。要将复数值数据输入到 SeriesNetworkDAGNetwork 对象中,输入层的 SplitComplexInputs 选项必须为 1 (true)。

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

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

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

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

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

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

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

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

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

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

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

数据存储

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

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

通过使用 transformcombine 函数,您可以使用其他内置数据存储进行预测。这些函数可以将从数据存储中读取的数据转换为 classify 所需的表或元胞数组格式。有关详细信息,请参阅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 是输入数据的特征数。

提示

此参量支持复数值预测变量。要将复数值数据输入到 SeriesNetworkDAGNetwork 对象中,输入层的 SplitComplexInputs 选项必须为 1 (true)。

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

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

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

要将复数值数据输入到 DAGNetworkSeriesNetwork 对象中,输入层的 SplitComplexInputs 选项必须为 1 (true)。

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

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

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

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

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

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

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

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

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

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

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

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

通过使用 transformcombine 函数,您可以使用其他内置数据存储进行预测。这些函数可以将从数据存储中读取的数据转换为 classify 所需的表或元胞数组格式。有关详细信息,请参阅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

名称-值参数

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

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

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

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

当您使用不同长度的序列进行预测时,小批量大小可能会影响添加到输入数据的填充量,从而导致不同的预测值。请尝试使用不同的值,看看哪个值最适合您的网络。要指定小批量大小和填充选项,请分别使用 MiniBatchSizeSequenceLength 选项。

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

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

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

  • "mex" - 编译并执行 MEX 函数。仅在使用 GPU 时,此选项才可用。使用 GPU 需要 Parallel Computing Toolbox 许可证和受支持的 GPU 设备。有关支持的设备的信息,请参阅 GPU 计算要求 (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 计算要求 (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 计算要求 (Parallel Computing Toolbox)如果您选择其中一个选项,而 Parallel Computing Toolbox 或合适的 GPU 不可用,则软件会返回错误。

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

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

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

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

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

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

要了解有关填充和截断序列的效果的更多信息,请参阅序列填充和截断

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

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

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

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

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

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

要了解有关填充和截断序列的效果的更多信息,请参阅序列填充和截断

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

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

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

输出参量

全部折叠

预测的类标签,以分类向量或分类向量元胞数组形式返回。Y 的格式取决于任务的类型。

下表描述了分类任务的格式。

任务格式
图像或特征分类N×1 标签分类向量,其中 N 是观测值数目
“序列到标签”分类
“序列到序列”分类

由分类标签序列组成的 N×1 元胞数组,其中 N 是观测值数目。将 SequenceLength 选项独立应用于每个小批量后,每个序列具有与对应输入序列相同的时间步数。

对于具有一个观测值的“序列到序列”分类任务,sequences 可以是矩阵。在这种情况下,Y 是由标签组成的分类序列。

预测的分数或响应,以矩阵或由矩阵组成的元胞数组形式返回。scores 的格式取决于任务的类型。

下表描述了 scores 的格式。

任务格式
图像分类N×K 矩阵,其中 N 是观测值数量,K 是类数量
“序列到标签”分类
特征分类
“序列到序列”分类

N×1 矩阵元胞数组,其中 N 是观测值数量。序列是具有 K 行的矩阵,其中 K 是类数量。将 SequenceLength 选项独立应用于每个小批量后,每个序列具有与对应输入序列相同的时间步数。

对于具有一个观测值的“序列到序列”分类任务,sequences 可以是矩阵。在这种情况下,scores 是由预测的类分数组成的矩阵。

有关探查分类分数的示例,请参阅使用深度学习对网络摄像头图像进行分类

算法

全部折叠

浮点算术

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

可再现性

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

备选方法

要使用具有多个输出层的网络对数据进行分类,请使用 predict 函数并将 ReturnCategorical 选项设置为 1 (true)。

要计算预测的分类分数,您还可以使用 predict 函数。

要从网络层计算激活值,请使用 activations 函数。

对于循环网络(如 LSTM 网络),您可以使用 classifyAndUpdateStatepredictAndUpdateState 进行预测并更新网络状态。

参考

[1] Kudo, Mineichi, Jun Toyama, and Masaru Shimbo. “Multidimensional Curve Classification Using Passing-through Regions.” Pattern Recognition Letters 20, no. 11–13 (November 1999): 1103–11. https://doi.org/10.1016/S0167-8655(99)00077-X.

[2] UCI Machine Learning Repository: Japanese Vowels Dataset. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels.

扩展功能

版本历史记录

在 R2016a 中推出

全部展开

R2024a: 不推荐

从 R2024a 开始,不推荐使用 DAGNetworkSeriesNetwork 对象,请改用 dlnetwork 对象。这意味着也不推荐使用 classify 函数。请改用 predictscores2label 函数。

目前没有停止支持 DAGNetworkSeriesNetwork 对象的计划。但是,推荐改用 dlnetwork 对象,此类对象具有以下优势:

  • dlnetwork 对象是一种统一的数据类型,支持网络构建、预测、内置训练、可视化、压缩、验证和自定义训练循环。

  • dlnetwork 对象支持更广泛的网络架构,您可以创建或从外部平台导入这些网络架构。

  • trainnet 函数支持 dlnetwork 对象,这使您能够轻松指定损失函数。您可以从内置损失函数中进行选择或指定自定义损失函数。

  • 使用 dlnetwork 对象进行训练和预测通常比使用 LayerGraphtrainNetwork 工作流更快。

要将已训练的 DAGNetworkSeriesNetwork 对象转换为 dlnetwork 对象,请使用 dag2dlnetwork 函数。

下表显示 classify 函数的典型用法,以及如何更新您的代码以改用 dlnetwork 对象。

不推荐推荐
Y = classify(net,X);
scores = minibatchpredict(net,X);
Y = scores2label(scores,classNames);