使用预测dlnetwork
对象
这个例子展示了如何使用dlnetwork
对象通过将数据分割为小批量。
对于大型数据集,或者在内存有限的硬件上进行预测时,可以通过将数据分割为小批量来进行预测。当用SeriesNetwork
或DAGNetwork
对象时,预测
函数自动将输入数据分割为小批量。为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
函数按照以下步骤对数据进行预处理:
从传入单元格数组中提取数据并连接到数值数组中。在第四个维度上的连接为每个图像添加了第三个维度,用作单通道维度。
规范化之间的像素值
0
而且1
.
函数X = preprocessMiniBatch(数据)从单元格和拼接中提取图像数据X = cat(4,data{:});将图像规范化。X = X/255;结束
另请参阅
dlarray
|dlnetwork
|预测
|minibatchqueue
|onehotdecode