classifyAndUpdateState

Классифицируйте данные с помощью обученной рекуррентной нейронной сети и обновляйте состояние сети

Описание

Можно сделать предсказания с помощью обученной нейронной сети для глубокого обучения на центральном процессоре или графическом процессоре. Для использования графический процессор требуется Parallel Computing Toolbox™ и поддерживаемый графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Задайте требования к оборудованию, используя 'ExecutionEnvironment' аргумент пары "имя-значение".

пример

[updatedNet,YPred] = classifyAndUpdateState(recNet,sequences) классифицирует данные в sequences использование обученной рекуррентной нейронной сети recNet и обновляет состояние сети.

Эта функция поддерживает только рекуррентные нейронные сети. Область входа recNet должен иметь по крайней мере один рекуррентный слой.

[updatedNet,YPred] = classifyAndUpdateState(___,Name,Value) использует любой из аргументов в предыдущих синтаксисах и дополнительные опции, заданные одним или несколькими Name,Value аргументы в виде пар. Для примера, 'MiniBatchSize',27 классифицирует данные с помощью мини-пакетов размером 27

Классификация и обновление состояния сети

пример

[updatedNet,YPred,scores] = classifyAndUpdateState(___) использует любой из аргументов в предыдущих синтаксисах, возвращает матрицу классификационных оценок и обновляет сетевое состояние.

Совет

При выполнении предсказаний с последовательностями разной длины мини-размер пакета может повлиять на количество заполнения, добавленного к входным данным, что может привести к различным предсказанным значениям. Попробуйте использовать различные значения, чтобы увидеть, какие из них лучше всего работают с вашей сетью. Чтобы задать размер мини-пакета и опции заполнения, используйте 'MiniBatchSize' и 'SequenceLength' опции, соответственно.

Примеры

свернуть все

Классифицируйте данные с помощью рекуррентной нейронной сети и обновляйте состояние сети.

Загрузка JapaneseVowelsNetпредварительно обученная сеть долгой краткосрочной памяти (LSTM), обученная на наборе данных японских гласных, как описано в [1] и [2]. Эта сеть была обучена на последовательностях, отсортированных по длине последовательности с размером мини-пакета 27.

load JapaneseVowelsNet

Просмотрите сетевую архитектуру.

net.Layers
ans = 
  5x1 Layer array with layers:

     1   'sequenceinput'   Sequence Input          Sequence input with 12 dimensions
     2   'lstm'            LSTM                    LSTM with 100 hidden units
     3   'fc'              Fully Connected         9 fully connected layer
     4   'softmax'         Softmax                 softmax
     5   'classoutput'     Classification Output   crossentropyex with '1' and 8 other classes

Загрузите тестовые данные.

[XTest,YTest] = japaneseVowelsTestData;

Цикл на временных шагах в последовательности. Классифицируйте каждый временной шаг и обновляйте состояние сети.

X = XTest{94};
numTimeSteps = size(X,2);
for i = 1:numTimeSteps
    v = X(:,i);
    [net,label,score] = classifyAndUpdateState(net,v);
    labels(i) = label;
end

Отобразите предсказанные метки на графике лестницы. График показывает, как предсказания изменяются между временными шагами.

figure
stairs(labels, '-o')
xlim([1 numTimeSteps])
xlabel("Time Step")
ylabel("Predicted Class")
title("Classification Over Time Steps")

Figure contains an axes. The axes with title Classification Over Time Steps contains an object of type stair.

Сравните предсказания с истинной меткой. Постройте график горизонтальной линии, показывающий истинную метку наблюдения.

trueLabel = YTest(94)
trueLabel = categorical
     3 

hold on
line([1 numTimeSteps],[trueLabel trueLabel], ...
    'Color','red', ...
    'LineStyle','--')
legend(["Prediction" "True Label"])

Figure contains an axes. The axes with title Classification Over Time Steps contains 2 objects of type stair, line. These objects represent Prediction, True Label.

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

свернуть все

Обученная рекуррентная нейронная сеть, заданная как SeriesNetwork или DAGNetwork объект. Вы можете получить обученную сеть, импортировав предварительно обученную сеть или обучив свою собственную сеть с помощью trainNetwork функция.

recNet является рекуррентной нейронной сетью. Он должен иметь по крайней мере один рекуррентный слой (для примера - сеть LSTM).

Данные последовательности или временных рядов, заданные как N-на-1 массив ячеек числовых массивов, где N - количество наблюдений, числовой массив, представляющий одну последовательность или datastore.

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

ВходОписание
Векторные последовательностиc -by - s матрицы, где c - количество функций последовательностей, а s - длина последовательности.
2-D последовательности изображенийh -by- w -by- c -by- s массивы, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, и s является длиной последовательности.
3-D последовательности изображений<reservedrangesplaceholder9>-by-<reservedrangesplaceholder8>-by-<reservedrangesplaceholder7>-by-<reservedrangesplaceholder6>-by-<reservedrangesplaceholder5>, где h, w, d, и c соответствуют высоте, ширине, глубине, и количество каналов 3D изображений, соответственно, и s - длина последовательности.

Для входа datastore, datastore должен вернуть данные как массив ячеек с последовательностями или таблицу, первый столбец которой содержит последовательности. Размерности данных последовательности должны соответствовать таблице выше.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: [updatedNet, YPred] = classifyAndUpdateState(recNet,C,'MiniBatchSize',27) классифицирует данные с помощью мини-пакетов размера 27.

Размер мини-пакетов для использования в предсказании, заданный как положительное целое число. Большие размеры мини-пакетов требуют большей памяти, но могут привести к более быстрым предсказаниям.

При выполнении предсказаний с последовательностями разной длины мини-размер пакета может повлиять на количество заполнения, добавленного к входным данным, что может привести к различным предсказанным значениям. Попробуйте использовать различные значения, чтобы увидеть, какие из них лучше всего работают с вашей сетью. Чтобы задать размер мини-пакета и опции заполнения, используйте 'MiniBatchSize' и 'SequenceLength' опции, соответственно.

Пример: 'MiniBatchSize',256

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

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

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

Опция по умолчанию 'auto'.

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

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

Аппаратный ресурс, заданный как разделенная разделенными запятой парами, состоящая из 'ExecutionEnvironment' и одно из следующих:

  • 'auto' - Использовать графический процессор, если он доступен; в противном случае используйте центральный процессор.

  • 'gpu' - Использовать графический процессор. Для использования графический процессор требуется Parallel Computing Toolbox и поддерживаемый графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Если Parallel Computing Toolbox или подходящий графический процессор недоступен, то программное обеспечение возвращает ошибку.

  • 'cpu' - Использовать центральный процессор.

Пример: 'ExecutionEnvironment','cpu'

Опция для заполнения, усечения или разделения входных последовательностей, заданная как одно из следующего:

  • 'longest' - Дополните последовательности в каждом мини-пакете, чтобы иметь ту же длину, что и самая длинная последовательность. Эта опция не отбрасывает никаких данных, хотя заполнение может ввести шум в сеть.

  • 'shortest' - обрезать последовательности в каждом мини-пакете так, чтобы они имели ту же длину, что и самая короткая последовательность. Эта опция гарантирует, что заполнение не будет добавлено, за счет отбрасывания данных.

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

Чтобы узнать больше об эффекте заполнения, усечения и разделения входа последовательностей, смотрите Sequence Padding, Truncation и Splitting.

Пример: 'SequenceLength','shortest'

Направление заполнения или усечения, заданное как одно из следующего:

  • 'right' - Дополните или обрезайте последовательности справа. Последовательности начинаются с того же временного шага, а программное обеспечение обрезает или добавляет заполнение в конец последовательностей.

  • 'left' - Дополните или обрезайте последовательности слева. Программа обрезает или добавляет заполнение к началу последовательностей, так что последовательности заканчиваются на одном и том же временном шаге.

Потому что слои LSTM обрабатывают данные последовательности по одному временному шагу за раз, когда слой OutputMode свойство 'last'любое заполнение на последних временных шагах может отрицательно повлиять на выход слоя. Чтобы дополнить или обрезать данные последовательности слева, установите 'SequencePaddingDirection' опция для 'left'.

Для сетей от последовательности к последовательности (когда OutputMode свойство 'sequence' для каждого слоя LSTM), любое заполнение в первые временные шаги может негативно повлиять на предсказания для более ранних временных шагов. Чтобы дополнить или обрезать данные последовательности справа, установите 'SequencePaddingDirection' опция для 'right'.

Чтобы узнать больше об эффекте заполнения, усечения и разделения входа последовательностей, смотрите Sequence Padding, Truncation и Splitting.

Значение, которым можно дополнить входные последовательности, заданное как скаляр. Опция действительна только при SequenceLength является 'longest' или положительное целое число. Не дополнять последовательности NaN, потому что это может распространять ошибки по сети.

Пример: 'SequencePaddingValue',-1

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

свернуть все

Обновленная сеть. updatedNet - тот же тип сети, что и входная сеть.

Предсказанные метки классов, возвращенные как категориальный вектор или массив ячеек из категориальных векторов. Формат YPred зависит от типа задачи.

Следующая таблица описывает формат YPred.

ЗадачаФормат
Классификация от последовательности до меткиN -by-1 категориальный вектор меток, где N - количество наблюдений.
Классификация последовательность-последовательность

N ячеек -by-1 категориальных последовательностей меток, где N количество наблюдений. Каждая последовательность имеет то же количество временных шагов, что и соответствующая входная последовательность после применения SequenceLength опция для каждой мини-партии независимо.

Для задач классификации последовательность-последовательность с одним наблюдением, sequences может быть матрицей. В этом случае YPred является категориальной последовательностью меток.

Предсказанные счета классов, возвращенные как матрица или массив ячеек матриц. Формат scores зависит от типа задачи.

Следующая таблица описывает формат scores.

ЗадачаФормат
Классификация от последовательности до меткиN -by - K матрица, где N - количество наблюдений, а K - количество классов.
Классификация последовательность-последовательность

N -by-1 массив ячеек матриц, где N количество наблюдений. Последовательности являются матрицами с K строками, где K - количество классов. Каждая последовательность имеет то же количество временных шагов, что и соответствующая входная последовательность после применения SequenceLength опция для каждой мини-партии независимо.

Для задач классификации последовательность-последовательность с одним наблюдением, sequences может быть матрицей. В этом случае scores является матрицей предсказанных счетов классов.

Алгоритмы

Когда вы обучаете сеть, используя trainNetwork function, или когда вы используете функции предсказания или валидации с DAGNetwork и SeriesNetwork объекты, программное обеспечение выполняет эти расчеты с помощью арифметики с одной точностью и плавающей точкой. Функции для обучения, предсказания и валидации включают trainNetwork, predict, classify, и activations. Программа использует арифметику с одной точностью, когда вы обучаете сети, используя как центральные процессоры, так и графические процессоры.

Ссылки

[1] М. Кудо, Дж. Тояма и М. Симбо. «Многомерная классификация кривых с использованием областей». Распознавание Букв. Том 20, № 11-13, стр. 1103-1111.

[2] UCI Machine Learning Repository: Японский набор данных гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

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

..
Введенный в R2017b