dlnetwork
ОбъектВ этом примере показано, как сделать предсказания с помощью dlnetwork
объект путем разделения данных в мини-пакеты.
Для больших наборов данных, или при предсказании на оборудовании с ограниченной памятью, делают предсказания путем разделения данных в мини-пакеты. При создании предсказаний с SeriesNetwork
или DAGNetwork
объекты, predict
функционируйте автоматически разделяет входные данные в мини-пакеты. Для dlnetwork
объекты, необходимо разделить данные в мини-пакеты вручную.
dlnetwork
ОбъектЗагрузите обученный dlnetwork
возразите и соответствующие классы.
s = load("digitsCustom.mat");
dlnet = s.dlnet;
classes = s.classes;
Загрузите данные о цифрах для предсказания.
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', ... 'nndatasets','DigitDataset'); imds = imageDatastore(digitDatasetPath, ... 'IncludeSubfolders',true);
Цикл по мини-пакетам тестовых данных и делает предсказания с помощью пользовательского цикла предсказания.
Используйте minibatchqueue
обработать и управлять мини-пакетами изображений. Задайте мини-пакетный размер 128. Установите свойство размера чтения datastore изображений к мини-пакетному размеру.
Для каждого мини-пакета:
Используйте пользовательский мини-пакет, предварительно обрабатывающий функциональный preprocessMiniBatch
(заданный в конце этого примера), чтобы конкатенировать данные в пакет и нормировать изображения.
Отформатируйте изображения с размерностями 'SSCB'
(пространственный, пространственный, канал, пакет). По умолчанию, minibatchqueue
объект преобразует данные в dlarray
объекты с базовым типом single
.
Сделайте предсказания на графическом процессоре, если вы доступны. По умолчанию, minibatchqueue
объект преобразует выход в gpuArray
если графический процессор доступен. Используя графический процессор требует Parallel Computing Toolbox™ и поддерживаемого устройства графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).
miniBatchSize = 128; imds.ReadSize = miniBatchSize; mbq = minibatchqueue(imds,... "MiniBatchSize",miniBatchSize,... "MiniBatchFcn", @preprocessMiniBatch,... "MiniBatchFormat","SSCB");
Цикл по мини-пакетам данных и делает предсказания с помощью predict
функция. Используйте onehotdecode
функционируйте к determing метки класса. Сохраните предсказанные метки класса.
numObservations = numel(imds.Files); YPred = strings(1,numObservations); predictions = []; % Loop over mini-batches. while hasdata(mbq) % Read mini-batch of data. dlX = next(mbq); % Make predictions using the predict function. dlYPred = predict(dlnet,dlX); % Determine corresponding classes. predBatch = onehotdecode(dlYPred,classes,1); predictions = [predictions predBatch]; end
Визуализируйте некоторые предсказания.
idx = randperm(numObservations,9); figure for i = 1:9 subplot(3,3,i) I = imread(imds.Files{idx(i)}); label = predictions(idx(i)); imshow(I) title("Label: " + string(label)) end
preprocessMiniBatch
функция предварительно обрабатывает данные с помощью следующих шагов:
Извлеките данные из массива входящей ячейки и конкатенируйте в числовой массив. Конкатенация по четвертой размерности добавляет третью размерность в каждое изображение, чтобы использоваться в качестве одноэлементной размерности канала.
Нормируйте пиксельные значения между 0
и 1
.
function X = preprocessMiniBatch(data) % Extract image data from cell and concatenate X = cat(4,data{:}); % Normalize the images. X = X/255; end
dlarray
| dlnetwork
| predict
| minibatchqueue
| onehotdecode