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

  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