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