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'.

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

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

  • 'mex' — Скомпилируйте и выполните MEX-функцию. Эта опция доступна при использовании графического процессора только. Входные данные или сетевые настраиваемые параметры должны храниться как gpuArray объекты. Используя графический процессор требует Parallel Computing Toolbox™ и поддерживаемого устройства графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Если Parallel Computing Toolbox или подходящий графический процессор не доступны, то программное обеспечение возвращает ошибку.

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

Опцией по умолчанию является 'auto'. Если 'auto' задан, MATLAB® применит много совместимой оптимизации. Если вы используете 'auto' опция, MATLAB никогда не генерирует MEX-функцию.

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

'mex' опция генерирует и выполняет MEX-функцию на основе сети и параметров, используемых в вызове функции. У вас может быть несколько MEX-функций, сопоставленных с одной сетью одновременно. Очищение сетевой переменной также очищает любые MEX-функции, сопоставленные с той сетью.

'mex' опция только доступна, когда вы используете графический процессор. Необходимо было установить компилятор C/C++ и Интерфейс GPU Coder™ для пакета поддержки Библиотек Глубокого обучения. Установите пакет поддержки с помощью Add-On Explorer в MATLAB. Для инструкций по настройке смотрите Setup MEX (GPU Coder). GPU Coder не требуется.

'mex' опция имеет нижеследующие ограничения:

  • state выходной аргумент не поддерживается.

  • Только single точность поддерживается. Входные данные или сетевые настраиваемые параметры должны иметь базовый тип single.

  • Сети с входными параметрами, которые не соединяются с входным слоем, не поддерживаются.

  • Прослеженный dlarray объекты не поддерживаются. Это означает что 'mex' опция не поддерживается в вызове dlfeval.

  • Не все слои поддерживаются. Для списка поддерживаемых слоев смотрите Поддерживаемые Слои (GPU Coder).

  • Вы не можете использовать MATLAB Compiler™, чтобы развернуть вашу сеть при использовании 'mex' опция.

Пример: 'Acceleration','mex'

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

свернуть все

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

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

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

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

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

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

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

Для текущих слоев, таких как слои LSTM, с HasStateInputs набор свойств к 1 (TRUE), таблица состояния не содержит записи для состояний того слоя.

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

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

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

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

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

Введенный в R2019b