predictAndUpdateState

Предскажите ответы с помощью обученной рекуррентной нейронной сети и обновите сетевое состояние

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

Синтаксис

[updatedNet,YPred] = predictAndUpdateState(recNet,sequences)
[updatedNet,YPred] = predictAndUpdateState(___,Name,Value)

Описание

пример

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

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

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

Совет

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

Примеры

свернуть все

Предскажите ответы с помощью обученной рекуррентной нейронной сети и обновите сетевое состояние.

Чтобы воспроизвести результаты в этом примере, установите rng на 'default'.

rng('default')

Загрузите 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

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

load JapaneseVowelsTest

Цикл по временным шагам в последовательности. Предскажите множество каждого временного шага и обновите сетевое состояние.

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

Постройте очки прогноза. График показывает, как очки прогноза изменяются между временными шагами.

classNames = string(net.Layers(end).Classes);
figure
lines = plot(scores');
xlim([1 numTimeSteps])
legend("Class " + classNames,'Location','northwest')
xlabel("Time Step")
ylabel("Score")
title("Prediction Scores Over Time Steps")

Подсветите, что очки прогноза в зависимости от времени продвигаются для правильного класса.

trueLabel = YTest(94)
trueLabel = categorical
     3 

lines(trueLabel).LineWidth = 3;

Отобразите итоговый прогноз временного шага в столбчатой диаграмме.

figure
bar(score)
title("Final Prediction Scores")
xlabel("Class")
ylabel("Score")

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

свернуть все

Обученная рекуррентная нейронная сеть, заданная как объект SeriesNetwork. Можно получить обучивший сеть путем импорта предварительно обученной сети или по образованию собственная сеть с помощью функции 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

Пример: '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'

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

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

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

свернуть все

Обновленная сеть, возвращенная как объект SeriesNetwork.

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

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

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

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

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

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

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

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

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

Алгоритмы

Все функции для обучения глубокому обучению, прогноза и валидации в 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