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. Установите для свойства read size изображения datastore значение mini-batch.
Для каждого мини-пакета:
Используйте пользовательскую функцию мини-пакетной предварительной обработки preprocessMiniBatch
(определено в конце этого примера), чтобы объединить данные в пакет и нормализовать изображения.
Отформатируйте изображения с помощью размерностей 'SSCB'
(пространственный, пространственный, канальный, пакетный). По умолчанию в minibatchqueue
объект преобразует данные в dlarray
объекты с базовым типом single
.
Делайте предсказания на графическом процессоре, если он доступен. По умолчанию в minibatchqueue
объект преобразует выход в gpuArray
при наличии графический процессор. Для использования графический процессор требуется Parallel Computing Toolbox™ и поддерживаемый графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox).
miniBatchSize = 128; imds.ReadSize = miniBatchSize; mbq = minibatchqueue(imds,... "MiniBatchSize",miniBatchSize,... "MiniBatchFcn", @preprocessMiniBatch,... "MiniBatchFormat","SSCB");
Закольцовывайте минибатчи данных и делайте предсказания, используя predict
функция. Используйте onehotdecode
функция для определения меток классов. Сохраните предсказанные метки классов.
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
The 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
| minibatchqueue
| onehotdecode
| predict