主要内容

预测

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

描述

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

为推理计算网络输出,使用预测函数。要计算用于训练的网络输出,使用向前函数。为预测SeriesNetworkDAGNetwork对象,看到预测

提示

为预测SeriesNetworkDAGNetwork对象,看到预测

例子

海底=预测(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;类= s.classes;

预测负荷数据

加载数字数据进行预测。

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

作出预测

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

使用minibatchqueue处理和管理小批量图像。指定一个迷你批处理大小为128。设置镜像数据存储的读大小属性为mini-batch大小。

为每个mini-batch:

  • 使用自定义小批量预处理功能preprocessMiniBatch(在本例的最后定义)将数据连接成批处理并对图像进行规范化。

  • 用尺寸格式化图像“SSCB”(spatial, spatial, channel, batch)。默认情况下,minibatchqueue对象将数据转换为dlarray具有底层类型的对象

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

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

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

numObservations =元素个数(imds.Files);YPred =字符串(1、numObservations);预测= [];%循环小批。hasdata(兆贝可)%读取小批数据。dlX =下一个(兆贝可);%使用predict函数进行预测。dlYPred =预测(dlnet dlX);%确定相应的类。predBatch = onehotdecode (dlYPred类1);[预测predBatch];结束

设想一些预测。

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

Mini-Batch预处理功能

preprocessMiniBatch函数使用以下步骤对数据进行预处理:

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

  2. 对之间的像素值进行归一化01

函数X = preprocessMiniBatch(数据)%从单元格提取图像数据并连接X =猫(4、数据{:});将图像归一化。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编码器™接口的深度学习库支持包。金宝app在MATLAB中使用Ad金宝appd-On Explorer安装支持包。有关安装说明,请参见墨西哥人设置(GPU编码器).不需要GPU编码器。

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

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

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

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

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

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

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

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

输出参数

全部折叠

输出数据,以格式化格式返回dlarray.有关dlarray格式,请参见fmt输入参数的dlarray

更新的网络状态,作为表返回。

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

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

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

  • 价值—state参数的值,指定为dlarray对象。

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

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

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

兼容性的考虑

全部展开

行为在R2021a中改变

扩展功能

介绍了R2019b