主要内容

predict

计算深度学习网络输出以进行推断

说明

一些深度学习层在训练期间的行为和其在推断(预测)期间的行为是不同的。例如,在训练期间,丢弃层会随机将输入元素设置为零以帮助防止过拟合,但在推断期间,丢弃层不会更改输入。

[Y1,...,YN] = predict(net,X1,...,XM) 在给定输入数据 X1, …, XM 和神经网络 net 的情况下,返回用于推断的网络输出 Y1, …, YN

示例

[Y1,...,YN,state] = predict(___) 还返回更新后的网络状态。

___ = predict(___,Name=Value) 使用一个或多个名称-值参量指定其他选项。

示例

全部折叠

将预训练的 SqueezeNet 神经网络加载到工作区中。

[net,classNames] = imagePretrainedNetwork;

从 PNG 文件中读取图像并对其进行分类。要对图像进行分类,请先将其数据类型转换为 single

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

Figure contains an axes object. The hidden axes object contains an object of type image.

X = single(im);
scores = predict(net,X);
[label,score] = scores2label(scores,classNames);

显示具有预测标签和对应分数的图像。

figure
imshow(im)
title(string(label) + " (Score: " + score + ")")

Figure contains an axes object. The hidden axes object with title bell pepper (Score: 0.89394) contains an object of type image.

输入参数

全部折叠

神经网络,指定为下列值之一:

要对深度神经网络进行剪枝,您需要 Deep Learning Toolbox™ Model Compression Library 支持包。该支持包是一项免费附加功能,您可以使用附加功能资源管理器进行下载。或者,请参阅 Deep Learning Toolbox Model Compression Library

输入数据,每个输入数据指定为下列值之一:

  • 格式化的 dlarray 对象

  • 未格式化的 dlarray 对象 (自 R2023b 起)

  • 数值数组 (自 R2023b 起)

提示

神经网络需要输入数据具有特定的布局。例如,向量序列分类网络通常需要向量序列表示形式为 t×c 数组,其中 tc 分别是序列的时间步数和通道数。神经网络通常具有一个输入层,用于指定数据的预期布局。

大多数数据存储和函数会以网络需要的布局输出数据。如果您的数据布局与网络预期的布局不同,则可通过使用 InputDataFormats 选项或将输入数据指定为格式化的 dlarray 对象来表明您的数据具有不同的布局。通常,调整 InputDataFormats 训练选项比预处理输入数据更为便捷。

有关详细信息,请参阅Deep Learning Data Formats

要创建接收未格式化数据的神经网络,请使用 inputLayer 对象并且不指定格式。要将未格式化的数据直接输入网络,请不要指定 InputDataFormats 参量。 (自 R2025a 起)

在 R2025a 之前的版本中: 对于没有输入层的神经网络,您必须使用 InputDataFormats 参量指定一种格式。

名称-值参数

全部折叠

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

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

示例: Y = predict(net,X,InputDataFormats="CBT") 使用格式为 "CBT"(通道、批量、时间)的序列数据进行预测。

神经网络输出,指定为层名称或层输出路径的字符串数组或字符向量元胞数组。使用以下形式之一指定输出:

  • "layerName",其中 layerName 是具有单个输出的层的名称。

  • "layerName/outputName",其中 layerName 是层的名称,outputName 是层输出的名称。对于具有多个输出的层,请使用此选项。

要使用 networkLayer 对象内部的层的输出,请先使用 expandLayers 函数展开嵌套网络。有关详细信息,请参阅网络层提示

如果您未指定要从中提取输出的层,则默认情况下,软件会使用 net.Outputs 指定的输出。

自 R2023b 起

输入数据维度的描述,指定为字符串数组、字符向量或字符向量元胞数组。

如果 InputDataFormats"auto",则软件会使用网络输入所需要的格式。否则,软件会为对应的网络输入使用指定的格式。

数据格式是一个字符串,其中每个字符描述对应数据的维度的类型。

这些字符是:

  • "S" - 空间

  • "C" - 通道

  • "B" - 批量

  • "T" - 时间

  • "U" - 未指定

例如,假设有一个表示一批序列的数组,其中第一个、第二个和第三个维度分别对应于通道、观测值和时间步。您可以将该数据描述为具有格式 "CBT"(通道、批量、时间)。

您可以指定多个标注为 "S""U" 的维度。每个 "C""B""T" 标签最多可以使用一次。该软件忽略第二个维度后的单一尾部 "U" 维度。

对于具有多个输入的神经网络 net,请指定一个输入数据格式数组,其中 InputDataFormats(i) 对应于输入 net.InputNames(i)

有关详细信息,请参阅Deep Learning Data Formats

要创建接收未格式化数据的神经网络,请使用 inputLayer 对象并且不指定格式。要将未格式化的数据直接输入网络,请不要指定 InputDataFormats 参量。 (自 R2025a 起)

在 R2025a 之前的版本中: 对于没有输入层的神经网络,您必须使用 InputDataFormats 参量指定一种格式。

数据类型: char | string | cell

自 R2023b 起

输出数据维度的描述,指定为下列值之一:

  • "auto" - 如果输出数据与输入数据的维数相同,则 predict 函数使用 InputDataFormats 指定的格式。如果输出数据与输入数据的维数不同,则 predict 函数会自动对输出数据的维度进行置换,使其与网络输入层或 InputDataFormats 值保持一致。

  • 字符串、字符向量或字符向量元胞数组 - predict 函数使用指定的数据格式。

数据格式是一个字符串,其中每个字符描述对应数据的维度的类型。

这些字符是:

  • "S" - 空间

  • "C" - 通道

  • "B" - 批量

  • "T" - 时间

  • "U" - 未指定

例如,假设有一个表示一批序列的数组,其中第一个、第二个和第三个维度分别对应于通道、观测值和时间步。您可以将该数据描述为具有格式 "CBT"(通道、批量、时间)。

您可以指定多个标注为 "S""U" 的维度。每个 "C""B""T" 标签最多可以使用一次。该软件忽略第二个维度后的单一尾部 "U" 维度。

有关详细信息,请参阅Deep Learning Data Formats

数据类型: char | string | cell

性能优化,指定为下列值之一:

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

  • "mex" - 编译并执行 MEX 函数。此选项仅在使用 GPU 时可用。您必须将输入数据或网络可学习参数存储为 gpuArray 对象。使用 GPU 需要 Parallel Computing Toolbox™ 和支持的 GPU 设备。有关受支持设备的信息,请参阅GPU 计算要求 (Parallel Computing Toolbox)如果 Parallel Computing Toolbox 或合适的 GPU 不可用,则软件会返回错误。

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

当您使用 "auto""mex" 选项时,软件可以提供性能优势,但会增加初始运行时间。后续调用该函数通常会更快。当您使用不同的输入数据多次调用该函数时,请使用性能优化。

Acceleration"mex" 时,软件会根据您在函数调用中指定的模型和参数生成并执行 MEX 函数。单个模型可以同时关联多个 MEX 函数。清除模型变量也会清除与该模型关联的所有 MEX 函数。

Acceleration"auto" 时,软件不会生成 MEX 函数。

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

"mex" 选项具有以下限制:

  • 不支持 state 输出参量。

  • 仅支持 single 精度。输入数据或网络可学习参数的基础类型必须为 single

  • 不支持输入未连接到输入层的网络。

  • 不支持跟踪的 dlarray 对象。这意味着在调用 dlfeval 时内部不支持 "mex" 选项。

  • 并非所有层都受支持。要查看支持的层的列表,请参阅Supported Layers (GPU Coder)

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

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

输出参量

全部折叠

具有多个输出的网络的输出数据,以下列值之一的形式返回:

  • 格式化的 dlarray 对象

  • 未格式化的 dlarray 对象 (自 R2023b 起)

  • 数值数组 (自 R2023b 起)

数据类型与输入数据的数据类型匹配。

输出 Y1, …, YN 的顺序与 Outputs 参量指定的输出顺序匹配。

对于分类神经网络,输出的元素对应于每个类的分数。分数的顺序与训练数据中类别的顺序匹配。例如,如果您使用分类标签 TTrain 训练神经网络,则分数的顺序与 categories(TTrain) 给出的类别顺序匹配。

更新后的网络状态,以表形式返回。

网络状态是一个具有三列的表:

  • Layer - 层名称,指定为字符串标量。

  • Parameter - 状态参数名称,指定为字符串标量。

  • Value - 状态参数的值,指定为 dlarray 对象。

层状态保留在层运算期间计算的信息,以便在层的后续前向传导中使用。例如,LSTM 层包含单元状态和隐藏状态,批量归一化层计算运行统计信息。

对于 HasStateInputs 属性设置为 1 (true) 的循环层(例如 LSTM 层),状态表不包含该层的状态条目。

使用 State 属性更新 dlnetwork 的状态。

算法

全部折叠

扩展功能

全部展开

版本历史记录

在 R2019b 中推出

全部展开