exponenta event banner

предсказать

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

Описание

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

Чтобы вычислить сетевые выходы для вывода, используйте 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 хранилища данных образа размер мини-пакета.

Для каждой мини-партии:

  • Использование пользовательской функции предварительной обработки мини-партии preprocessMiniBatch (определено в конце этого примера) для объединения данных в пакет и нормализации изображений.

  • Форматирование изображений с размерами 'SSCB' (пространственный, пространственный, канальный, пакетный). По умолчанию minibatchqueue объект преобразует данные в dlarray объекты с базовым типом single.

  • Сделайте прогнозы на GPU, если они доступны. По умолчанию minibatchqueue объект преобразует выходные данные в gpuArray если графический процессор доступен. Для использования графического процессора требуется Toolbox™ параллельных вычислений и поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (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

Функция предварительной обработки мини-партий

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