classifyAndUpdateState

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

Описание

Можно сделать предсказания с помощью обученной нейронной сети для глубокого обучения или на центральном процессоре или на графическом процессоре. Используя графический процессор требует Parallel Computing Toolbox™, и CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше. Задайте требования к аппаратным средствам с помощью аргумента пары "имя-значение" '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")

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

trueLabel = YTest(94)
trueLabel = categorical
     3 

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

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

свернуть все

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

recNet рекуррентная нейронная сеть. Это должно иметь по крайней мере один текущий слой (например, сеть LSTM).

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

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

Входной параметрОписание
Векторные последовательностиc-by-s матрицы, где c является количеством функций последовательностей и s, является длиной последовательности.
2D последовательности изображенийh-by-w-by-c-by-s массивы, где h, w и c соответствуют высоте, ширине, и количеству каналов изображений, соответственно, и s, является длиной последовательности.
3-D последовательности изображенийh-by-w-by-d-by-c-by-s, где h, w, d и c соответствуют высоте, ширине, глубине, и количеству каналов 3-D изображений, соответственно, и 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, и CUDA включил NVIDIA, графический процессор с вычисляет возможность 3.0 или выше. Если Parallel Computing Toolbox или подходящий графический процессор не доступны, то программное обеспечение возвращает ошибку.

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

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

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

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

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

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

Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.

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

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

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

  • 'left' — Заполните или обрежьте последовательности слева. Программное обеспечение обрезает или добавляет дополнение в запуск последовательностей так, чтобы конец последовательностей одновременно продвинулся.

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

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

Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.

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

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

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

свернуть все

Сеть Updated. 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 матрица предсказанных баллов класса.

Алгоритмы

Все функции для обучения глубокому обучению, предсказания и валидации в Deep Learning Toolbox™ выполняют расчеты с помощью арифметики с плавающей точкой, с одинарной точностью. Функции для глубокого обучения включают trainNetwork, predict, classify, и activations. Программное обеспечение использует арифметику с одинарной точностью, когда вы обучаете нейронные сети с помощью и центральных процессоров и графических процессоров.

Ссылки

[1] М. Кудо, J. Тояма, и М. Шимбо. "Многомерная Классификация Кривых Используя Прохождение через области". Буквы Распознавания образов. Издание 20, № 11-13, страницы 1103-1111.

[2] Репозиторий Машинного обучения UCI: японский Набор данных Гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

Введенный в R2017b
Для просмотра документации необходимо авторизоваться на сайте