Сделайте прогнозы Используя 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);

Сделайте прогнозы

Цикл по мини-пакетам тестовых данных и делает прогнозы с помощью пользовательского цикла прогноза. Чтобы считать мини-пакет данных из datastore, установите ReadSize свойство к мини-пакетному размеру.

Для каждого мини-пакета:

  • Преобразуйте данные в dlarray объекты с базовым одним типом и указывают, что размерность маркирует 'SSCB' (пространственный, пространственный, канал, пакет).

  • Для прогноза графического процессора преобразуйте в gpuArray объекты.

  • Сделайте прогнозы с помощью predict функция.

  • Определите метки класса путем нахождения максимальных баллов.

Задайте опции прогноза. Задайте мини-пакетный размер 128 и сделайте прогнозы на графическом процессоре, если вы доступны. Используя графический процессор требует Parallel Computing Toolbox™, и CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше.

miniBatchSize = 128;
executionEnvironment = "auto";

Установите свойство размера чтения datastore изображений к мини-пакетному размеру.

imds.ReadSize = miniBatchSize;

Сделайте прогнозы цикличным выполнением по мини-пакетам данных.

numObservations = numel(imds.Files);
YPred = strings(1,numObservations);
i = 1;

% Loop over mini-batches.
while hasdata(imds)
    
    % Read mini-batch of data.
    data = read(imds);
    X = cat(4,data{:});
    
    % Normalize the images.
    X = single(X)/255;
    
    % Convert mini-batch of data to dlarray.
    dlX = dlarray(X,'SSCB');
    
    % If training on a GPU, then convert data to gpuArray.
    if (executionEnvironment == "auto" && canUseGPU) || executionEnvironment == "gpu"
        dlX = gpuArray(dlX);
    end
    
    % Make predictions using the predict function.
    dlYPred = predict(dlnet,dlX);
   
    % Determine corresponding classes.
    [~,idxTop] = max(extractdata(dlYPred),[],1);
    idxMiniBatch = i:min((i+miniBatchSize-1),numObservations);
    YPred(idxMiniBatch) = classes(idxTop);
    
    i = i + miniBatchSize;
end

Визуализируйте некоторые прогнозы.

idx = randperm(numObservations,9);
figure
for i = 1:9
    subplot(3,3,i)
    I = imread(imds.Files{idx(i)});
    label = YPred(idx(i));
    imshow(I)
    title("Label: " + label)
end

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

| |

Похожие темы