predict

Вычислите нейронную сеть для глубокого обучения выход для вывода

Описание

Некоторые слои глубокого обучения ведут себя по-другому во время обучения и заключают (предсказание). Например, во время обучения, слои уволенного случайным образом обнуляют входные элементы, чтобы помочь предотвратить сверхподбор кривой, но во время вывода, слои уволенного не изменяют вход.

Чтобы вычислить сетевые выходные параметры для вывода, используйте predict функция. Чтобы вычислить сетевые выходные параметры для обучения, используйте forward функция. Для предсказания с SeriesNetwork и DAGNetwork объекты, смотрите predict.

Совет

Для предсказания с SeriesNetwork и DAGNetwork объекты, смотрите predict.

пример

dlY = predict(dlnet,dlX) возвращает сетевой выход dlY во время вывода, учитывая входные данные dlX и сеть dlnet с одним входом и одним выходом.

dlY = predict(dlnet,dlX1,...,dlXM) возвращает сетевой выход dlY во время вывода, учитывая M входные параметры dlX1, ...,dlXM и сеть dlnet это имеет M входные параметры и один выход.

[dlY1,...,dlYN] = predict(___) возвращает N выходные параметры dlY1, …, dlYN во время вывода для сетей, которые имеют N выходные параметры с помощью любого из предыдущих синтаксисов.

[dlY1,...,dlYK] = predict(___,'Outputs',layerNames) возвращает выходные параметры dlY1, …, dlYK во время вывода для заданных слоев с помощью любого из предыдущих синтаксисов.

[___] = predict(___,'Acceleration',acceleration) также задает оптимизацию эффективности, чтобы использовать во время вывода, в дополнение к входным параметрам в предыдущих синтаксисах.

[___,state] = predict(___) также возвращает обновленное сетевое состояние.

Примеры

свернуть все

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

  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

Входные параметры

свернуть все

Сеть для пользовательских учебных циклов в виде dlnetwork объект.

Входные данные в виде отформатированного dlarray. Для получения дополнительной информации о dlarray форматы, смотрите fmt входной параметр dlarray.

Слои, чтобы извлечь выходные параметры из в виде массива строк или массива ячеек из символьных векторов, содержащего имена слоя.

  • Если layerNames(i) соответствует слою с одним выходом, затем layerNames(i) имя слоя.

  • Если layerNames(i) соответствует слою с несколькими выходными параметрами, затем layerNames(i) имя слоя, сопровождаемое символьным "/"и имя слоя вывело: 'layerName/outputName'.

Оптимизация эффективности в виде одного из следующего:

  • 'auto' — Автоматически примените много оптимизации, подходящей для входной сети и аппаратных ресурсов.

  • 'none' — Отключите все ускорение.

Опцией по умолчанию является 'auto'.

Используя 'auto' ускоряющая опция может предложить выигрыши в производительности, но за счет увеличенного начального времени выполнения. Последующие вызовы совместимыми параметрами быстрее. Используйте оптимизацию эффективности, когда вы запланируете вызвать функцию многократно с помощью различных входных данных с тем же размером и формой.

Выходные аргументы

свернуть все

Выходные данные, возвращенные как отформатированный dlarray. Для получения дополнительной информации о dlarray форматы, смотрите fmt входной параметр dlarray.

Обновленное сетевое состояние, возвращенное как таблица.

Сетевое состояние является таблицей с тремя столбцами:

  • Layer – Имя слоя в виде строкового скаляра.

  • Parameter – Название параметра в виде строкового скаляра.

  • Value – Значение параметра в виде dlarray объект.

Сетевое состояние содержит информацию, которую помнит сеть между итерациями. Например, состояние LSTM и слоев нормализации партии.

Обновите состояние dlnetwork использование State свойство.

Вопросы совместимости

развернуть все

Поведение изменяется в R2021a

Расширенные возможности

Введенный в R2019b