Сделайте предсказания Используя 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™, и CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше.

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 функция предварительно обрабатывает данные с помощью следующих шагов:

  1. Извлеките данные из массива входящей ячейки и конкатенируйте в числовой массив. Конкатенация по четвертой размерности добавляет третью размерность в каждое изображение, чтобы использоваться в качестве одноэлементной размерности канала.

  2. Нормируйте пиксельные значения между 0 и 1.

function X = preprocessMiniBatch(data)    
    % Extract image data from cell and concatenate
    X = cat(4,data{:});
    
    % Normalize the images.
    X = X/255;
end

Смотрите также

| | | |

Похожие темы