gru

Стробируемый рекуррентный модуль

Описание

Операция стробируемого рекуррентного модуля (GRU) позволяет сети изучать зависимости между временными шагами во временных рядах и данными последовательности.

Примечание

Эта функция применяет операцию GRU глубокого обучения к dlarray данные. Если необходимо применить операцию GRU в layerGraph объект или Layer массив, используйте следующий слой:

пример

dlY = gru(dlX,H0,weights,recurrentWeights,bias) применяет расчет стробируемого рекуррентного модуля (GRU) к входу dlX использование начального скрытого состояния H0, и параметры weights, recurrentWeights, и bias. Область входа dlX является форматированным dlarray с метками размерностей. Область выхода dlY является форматированным dlarray с теми же метками размерностей, что и dlX, за исключением любых 'S' размерности.

gru функция обновляет скрытое состояние, используя гиперболическую тангенциальную функцию (tanh) в качестве функции активации состояния. gru функция использует сигмоидную функцию, заданную как σ(x)=(1+ex)1 как функцию активации ворот.

[dlY,hiddenState] = gru(dlX,H0,weights,recurrentWeights,bias) также возвращает скрытое состояние после операции GRU.

[___] = gru(___,'DataFormat',FMT) также задает формат размерности FMT когда dlX не является форматированным dlarray. Область выхода dlY является неформатированным dlarray с тем же порядком размерностей, что и dlX, за исключением любых 'S' размерности.

Примеры

свернуть все

Выполните операцию GRU с использованием 100 скрытых модулей.

Создайте данные последовательности входа как 32 наблюдения с десятью каналами и длиной последовательности 64.

numFeatures = 10;
numObservations = 32;
sequenceLength = 64;

X = randn(numFeatures,numObservations,sequenceLength);
dlX = dlarray(X,'CBT');

Создайте начальное скрытое состояние со 100 скрытыми модулями. Используйте то же начальное скрытое состояние для всех наблюдений.

numHiddenUnits = 100;
H0 = zeros(numHiddenUnits,1);

Создайте настраиваемые параметры для операции GRU.

weights = dlarray(randn(3*numHiddenUnits,numFeatures));
recurrentWeights = dlarray(randn(3*numHiddenUnits,numHiddenUnits));
bias = dlarray(randn(3*numHiddenUnits,1));

Выполните расчет ГРУ.

[dlY,hiddenState] = gru(dlX,H0,weights,recurrentWeights,bias);

Просмотр меток размеров и размерностей dlY.

size(dlY)
ans = 1×3

   100    32    64

dlY.dims
ans = 
'CBT'

Просмотрите размер hiddenState.

size(hiddenState)
ans = 1×2

   100    32

Можно использовать скрытое состояние, чтобы отслеживать состояние операции GRU и вводить дополнительные последовательные данные.

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

свернуть все

Входные данные, заданные как dlarray с метками размерностей или без них или числовым массивом. Когда dlX не является форматированным dlarrayнеобходимо задать формат метки размерности с помощью 'DataFormat',FMT. Если dlX является числовым массивом, по крайней мере, один из H0, weights, recurrentWeights, или bias должен быть dlarray.

dlX должен содержать размерность последовательности, помеченный 'T'. Если dlX имеет любые пространственные размерности, помеченные 'S', они сплющены в 'C' размерность канала. Если dlX не имеет размерности канала, затем добавляется один. Если dlX имеет какие-либо неопределенные размерности, помеченные 'U'Они должны быть одиночками.

Типы данных: single | double

Начальный скрытый вектор состояния, заданный как dlarray с метками размерностей или без них или числовым массивом.

Если H0 является форматированным dlarray, он должен содержать размерность канала 'C' и необязательно пакетная размерность, маркированная 'B' с тем же размером, что и 'B' размерность dlX. Если H0 не имеет 'B' размерность, функция использует один и тот же скрытый вектор состояния для каждого наблюдения в dlX.

Если H0 является форматированным dlarray, затем размер 'C' размерность определяет количество скрытых модулей. В противном случае размер первой размерности определяет количество скрытых модулей.

Типы данных: single | double

Веса, заданные как dlarray с метками размерностей или без них или числовым массивом.

Задайте weights как матрица размера 3*NumHiddenUnits-by- InputSize, где NumHiddenUnits - размер 'C' размерность H0, и InputSize - размер 'C' размерность dlX умноженный на размер каждого 'S' размерность dlX, где присутствует.

Если weights является форматированным dlarray, он должен содержать 'C' размерность размера 3*NumHiddenUnits и a 'U' размерность размера InputSize.

Типы данных: single | double

Периодические веса, заданные как dlarray с метками размерностей или без них или числовым массивом.

Задайте recurrentWeights как матрица размера 3*NumHiddenUnits-by- NumHiddenUnits, где NumHiddenUnits - размер 'C' размерность H0.

Если recurrentWeights является форматированным dlarray, он должен содержать 'C' размерность размера 3*NumHiddenUnits и a 'U' размерность размера NumHiddenUnits.

Типы данных: single | double

Смещение, заданное как dlarray вектор с метками размерностей или без них или числовой вектор.

Задайте bias как вектор длины 3*NumHiddenUnits, где NumHiddenUnits - размер 'C' размерность H0.

Если bias является форматированным dlarray, размерность несинглтона должен быть помечен 'C'.

Типы данных: single | double

Размерность неформатированных входных данных, заданный как разделенная разделенными запятой парами, состоящая из 'DataFormat' и символьный массив или строка FMT который обеспечивает метку для каждой размерности данных. Каждый символ в FMT должно быть одно из следующих:

  • 'S' - Пространственный

  • 'C' - Канал

  • 'B' - Партия (например, выборки и наблюдения)

  • 'T' - Время (например, последовательности)

  • 'U' - Не определено

Можно задать несколько размерности, маркированных 'S' или 'U'. Можно использовать метки 'C', 'B', и 'T' самое большее сразу.

Вы должны задать 'DataFormat',FMT когда входные данные dlX не является форматированным dlarray.

Пример: 'DataFormat','SSCB'

Типы данных: char | string

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

свернуть все

Выход ГРУ, возвращенный как dlarray. Область выхода dlY имеет тот же базовый тип данных, что и входной dlX.

Если входные данные dlX является форматированным dlarray, dlY имеет те же метки размерностей, что и dlX, за исключением любых 'S' размерности. Если входные данные не являются форматированным dlarray, dlY является неформатированным dlarray с тем же порядком размерности, что и входные данные.

Размер 'C' размерность dlY совпадает с количеством скрытых модулей, заданным размером 'C' размерность H0.

Скрытый вектор состояния для каждого наблюдения, возвращенный как dlarray или числовой массив с совпадающим типом данных, что и H0.

Если вход H0 является форматированным dlarray, затем выход hiddenState является форматированным dlarray с форматом 'CB'.

Ограничения

  • functionToLayerGraph не поддерживает gru функция. Если вы используете functionToLayerGraph с функцией, которая содержит gru операция, результат LayerGraph содержит слои заполнителя.

Подробнее о

свернуть все

Стробируемый рекуррентный модуль

Операция GRU позволяет сети изучать зависимости между временными шагами во временных рядах и данными последовательности. Для получения дополнительной информации см. Определение слоя затворных рекуррентных модулей на gruLayer страница с описанием.

Ссылки

[1] Cho, Kyunghyun, Bart Van Merriénboer, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Holger Schwenk, и Yoshua Bengio. «Ознакомление с представлениями фразы с использованием RNN-декодера для статистического машинного перевода». arXiv preprint arXiv:1406.1078 (2014).

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

Введенный в R2020a