主要内容

预测

计算用于推理的深度学习网络输出

描述

一些深度学习层在训练和推断(预测)过程中表现不同。例如,在训练过程中,dropout层随机将输入元素设置为零以帮助防止过拟合,但在推断过程中,dropout层不改变输入。

要计算用于推理的网络输出,请使用预测函数。要计算用于训练的网络输出,请使用向前函数。用于预测SeriesNetwork而且DAGNetwork对象,看到预测

提示

用于预测SeriesNetwork而且DAGNetwork对象,看到预测

例子

海底=预测(dlnetdlX返回网络输出海底在推理时,给定输入数据dlX还有网络dlnet只有一个输入和一个输出。

海底=预测(dlnet、dlX1 dlXM……)返回网络输出海底在推理过程中输入dlX1,…,dlXM还有网络dlnet输入和单一输出。

[dlY1,…,dlYN预测,预测___返回N输出dlY1、……dlYN在对网络进行推断时N使用任何前面的语法输出。

[dlY1,…,dlYK预测,预测___“输出”,layerNames返回输出dlY1、……dlYK在使用任何前面的语法对指定层进行推断期间。

(___预测,预测___“加速度”,加速度还指定在推理期间使用的性能优化,以及前面语法中的输入参数。

(___状态预测,预测___还返回更新后的网络状态。

例子

全部折叠

这个例子展示了如何使用dlnetwork对象通过将数据分割为小批量。

对于大型数据集,或者在内存有限的硬件上进行预测时,可以通过将数据分割为小批量来进行预测。当用SeriesNetworkDAGNetwork对象时,预测函数自动将输入数据分割为小批量。为dlnetwork对象时,必须手动将数据分割为小批。

负载dlnetwork对象

装载一个训练有素的dlnetwork对象和相应的类。

S =负载(“digitsCustom.mat”);Dlnet = s.dlnet;Classes = s.classes;

预测负荷数据

加载数字数据进行预测。

digitDatasetPath = fullfile(matlabroot,“工具箱”“nnet”“nndemos”...“nndatasets”“DigitDataset”);imds = imageDatastore(digitDatasetPath,...“IncludeSubfolders”,真正的);

作出预测

遍历测试数据的小批,并使用自定义预测循环进行预测。

使用minibatchqueue处理和管理小批量的图像。指定迷你批处理大小为128。将映像数据存储的read size属性设置为迷你批处理大小。

对于每个小批量:

  • 使用自定义小批量预处理功能preprocessMiniBatch(在本例结束时定义)将数据连接到一个批处理中并规范化图像。

  • 用尺寸格式化图像“SSCB”(空间,空间,通道,批次)。默认情况下,minibatchqueue对象将数据转换为dlarray具有基础类型的对象

  • 在可用的GPU上进行预测。默认情况下,minibatchqueue对象将输出转换为gpuArray如果GPU可用。使用GPU需要并行计算工具箱™和受支持的GPU设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱)

miniBatchSize = 128;洛桑国际管理发展学院。ReadSize = miniBatchSize;MBQ = minibatchqueue(imds,...“MiniBatchSize”miniBatchSize,...“MiniBatchFcn”@preprocessMiniBatch,...“MiniBatchFormat”“SSCB”);

对小批数据进行循环,并使用预测函数。使用onehotdecode函数来确定类标签。存储预测的类标签。

numObservations = numel(imds.Files);YPred = strings(1,numObservations);预测= [];在小批上循环。hasdata(兆贝可)读取小批数据。dlX = next(mbq);使用预测函数进行预测。dlYPred =预测(dlnet,dlX);确定相应的类。predBatch = onehotdecode(dlYPred,classes,1);预测=[预测预批次];结束

想象一些预测。

idx = randperm(numObservations,9);数字i = 1:9 subplot(3,3,i) i = imread(imds.Files{idx(i)});标签=预测(idx(i));imshow (I)标题(”的标签:“+字符串(标签)结束

小批量预处理功能

preprocessMiniBatch函数按照以下步骤对数据进行预处理:

  1. 从传入单元格数组中提取数据并连接到数值数组中。在第四个维度上的连接为每个图像添加了第三个维度,用作单通道维度。

  2. 规范化之间的像素值0而且1

函数X = preprocessMiniBatch(数据)从单元格和拼接中提取图像数据X = cat(4,data{:});将图像规范化。X = X/255;结束

输入参数

全部折叠

用于自定义训练循环的网络,指定为dlnetwork对象。

输入数据,指定为格式化的dlarray。欲了解更多有关dlarray格式,请参见fmt的输入参数dlarray

要从中提取输出的层,指定为字符串数组或包含层名的字符向量的单元格数组。

  • 如果layerNames(我)那么,对应于具有单一输出的层layerNames(我)是层的名称。

  • 如果layerNames(我)那么,对应于具有多个输出的层layerNames(我)是层名后面加字符"/和层输出的名称:“layerName / outputName”

性能优化,指定为由逗号分隔的对组成“加速”和以下其中之一:

  • “汽车”—自动应用大量适合输入网络和硬件资源的优化。

  • 墨西哥人的—编译并执行MEX函数。该选项仅在使用GPU时可用。输入数据或网络可学习参数必须存储为gpuArray对象。使用GPU需要并行计算工具箱™和受支持的GPU设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱)如果并行计算工具箱或合适的GPU不可用,那么软件将返回一个错误。

  • “没有”-禁用所有加速。

默认选项为“汽车”。如果“汽车”指定,MATLAB®将应用许多兼容的优化。如果你使用“汽车”选项,MATLAB不生成MEX函数。

使用“加速”选项“汽车”而且墨西哥人的可以提供性能优势,但以增加初始运行时间为代价。具有兼容参数的后续调用速度更快。当您计划使用新的输入数据多次调用函数时,请使用性能优化。

墨西哥人的选项根据函数调用中使用的网络和参数生成并执行一个MEX函数。您可以同时拥有与单个网络关联的多个MEX功能。清除网络变量也会清除与该网络关联的任何MEX函数。

墨西哥人的选项仅在使用GPU时可用。您必须安装C/ c++编译器和GPU Coder™深度学习库接口支持包。金宝app使用MATLAB中的Ad金宝appd-On资源管理器安装支持包。有关设置说明,请参见墨西哥人设置(GPU编码器)。GPU Coder不需要。

墨西哥人的选项有以下限制:

  • 状态不支持输出参数。金宝app

  • 只有支持精度。金宝app输入数据或网络可学习参数必须具有底层类型

  • 不支持具有未连接到输入层的输入网络。金宝app

  • 追踪dlarray不支持对象。金宝app这意味着墨西哥人的的调用中不支持金宝appdlfeval

  • 并非所有层都受支持。金宝app有关受支持层的列表,请参见金宝app金宝app支持层(GPU编码器)

  • 你不能使用MATLAB编译器™控件时部署网络墨西哥人的选择。

例子:“加速”、“墨西哥人的

输出参数

全部折叠

输出数据,以格式化的形式返回dlarray。欲了解更多有关dlarray格式,请参见fmt的输入参数dlarray

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

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

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

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

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

层状态包含在层操作期间计算的信息,这些信息将保留用于层的后续向前传递。例如,LSTM层的单元状态和隐藏状态,或者在批归一化层中运行统计信息。

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

更新的状态dlnetwork使用状态财产。

兼容性的考虑

全部展开

R2021a的行为发生了变化

扩展功能

R2019b引入