Contenido principal

gru

Unidad recurrente cerrada

Descripción

La operación de unidad recurrente cerrada (GRU) permite que una red aprenda dependencias entre unidades de tiempo de series de tiempo y datos secuenciales.

Nota

Esta función aplica la operación GRU de deep learning a los datos de un objeto dlarray. Si desea aplicar una operación GRU dentro de un objeto dlnetwork, use gruLayer.

Y = gru(X,H0,weights,recurrentWeights,bias) aplica un cálculo de unidad recurrente cerrada (GRU) a la entrada X empleando el estado oculto inicial H0 y los parámetros weights, recurrentWeights y bias. La entrada X debe ser un objeto dlarray con formato. La salida Y es un objeto dlarray con formato con el mismo formato de dimensión que X, excepto en el caso de las dimensiones "S".

La función gru actualiza el estado oculto empleando la función tangente hiperbólica (tanh) como la función de activación del estado. La función gru utiliza la función sigmoide dada por σ(x)=(1+ex)1 como la función de activación de la puerta.

ejemplo

[Y,hiddenState] = gru(X,H0,weights,recurrentWeights,bias) también devuelve el estado oculto después de la operación GRU.

___ = gru(X,H0,weights,recurrentWeights,bias,DataFormat=FMT) también especifica el formato de dimensión FMT donde X no es un objeto dlarray con formato. La salida Y es un objeto dlarray sin formato con el mismo orden de dimensión que X, excepto en las dimensiones "S".

___ = gru(X,H0,weights,recurrentWeights,bias,Name=Value) especifica opciones adicionales con uno o más argumentos nombre-valor.

Ejemplos

contraer todo

Realice una operación GRU utilizando 100 unidades ocultas.

Cree los datos de secuencia de entrada como 32 observaciones con 10 canales y una longitud de secuencia de 64.

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

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

Cree el estado oculto inicial con 100 unidades ocultas. Utilice el mismo estado oculto inicial para todas las observaciones.

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

Cree los parámetros que se pueden aprender para la operación GRU.

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

Realice el cálculo GRU.

[Y,hiddenState] = gru(X,H0,weights,recurrentWeights,bias);

Visualice el tamaño y el formato de dimensión de la salida.

size(Y)
ans = 1×3

   100    32    64

Y.dims
ans = 
'CBT'

Visualice el tamaño del estado oculto.

size(hiddenState)
ans = 1×2

   100    32

Puede utilizar el estado oculto para realizar un seguimiento del estado de la operación GRU e introducir más datos secuenciales.

Argumentos de entrada

contraer todo

Datos de entrada, especificados como un objeto dlarray con formato, un objeto dlarray sin formato o un arreglo numérico. Cuando X no es un objeto dlarray con formato, debe especificar el formato de etiqueta de dimensión con el argumento nombre-valor DataFormat. Si X es un arreglo numérico, al menos uno de H0, weights, recurrentWeights o bias debe ser un objeto dlarray.

X debe contener una dimensión de secuencia etiquetada "T". Si X cuenta con alguna dimensión espacial etiquetada "S", esta se aplana en la dimensión de canal "C". Si X no cuenta con una dimensión de canal, se añade una. Si X cuenta con alguna dimensión sin especificar etiquetada "U", esta debe ser única.

Tipos de datos: single | double

Vector de estado oculto inicial, especificado como un objeto dlarray con formato, un objeto dlarray sin formato o un arreglo numérico.

Si H0 es un objeto dlarray con formato, debe contener una dimensión de canal etiquetada "C" y opcionalmente una dimensión de lote etiquetada "B" con el mismo tamaño que la dimensión "B" de X. Si H0 no cuenta con una dimensión "B", la función utiliza el mismo vector de estado oculto para cada observación en X.

Si H0 es un objeto dlarray con formato, el tamaño de la dimensión "C" determina el número de unidades ocultas. De lo contrario, el tamaño de la primera dimensión determina el número de unidades ocultas.

Tipos de datos: single | double

Pesos, especificados como un objeto dlarray con formato, un objeto dlarray sin formato o un arreglo numérico.

Especifique weights como una matriz con un tamaño de 3*NumHiddenUnits por InputSize, donde NumHiddenUnits es el tamaño de la dimensión "C" de H0, e InputSize es el tamaño de la dimensión "C" de X multiplicada por el tamaño de cada dimensión "S" de X, donde esté presente.

Si weights es un objeto dlarray con formato, debe contener una dimensión "C" con un tamaño de 3*NumHiddenUnits y una dimensión "U" con un tamaño de InputSize.

Tipos de datos: single | double

Pesos recurrentes, especificados como un objeto dlarray con formato, un objeto dlarray sin formato o un arreglo numérico.

Especifique recurrentWeights como una matriz con un tamaño de 3*NumHiddenUnits por NumHiddenUnits, donde NumHiddenUnits es el tamaño de la dimensión "C" de H0.

Si recurrentWeights es un objeto dlarray con formato, debe contener una dimensión "C" con un tamaño de 3*NumHiddenUnits y una dimensión "U" con un tamaño de NumHiddenUnits.

Tipos de datos: single | double

Sesgo, especificado como un objeto dlarray con formato, un objeto dlarray sin formato o un arreglo numérico.

Especifique bias como un vector con una longitud de 3*NumHiddenUnits, donde NumHiddenUnits es el tamaño de la dimensión "C" de H0.

Si bias es un objeto dlarray con formato, la dimensión única debe estar etiquetada como "C".

Tipos de datos: single | double

Argumentos de par nombre-valor

contraer todo

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.

En las versiones anteriores a la R2021a, use comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: Y = gru(X,H0,weights,recurrentWeights,bias,DataFormat="CTB") aplica la operación de GRU y especifica que los datos tienen formato "CTB" (canal, tiempo, lote).

Descripción de las dimensiones de los datos, especificada como vector de caracteres o escalar de cadena.

Un formato de datos es una cadena de caracteres, en la que cada carácter describe el tipo de la dimensión de datos correspondiente.

Los caracteres son los siguientes:

  • "S": espacial

  • "C": canal

  • "B": lote

  • "T": tiempo

  • "U": sin especificar

Por ejemplo, considere un arreglo que representa un lote de secuencias, donde la primera, la segunda y la tercera dimensión corresponden a canales, observaciones y unidades de tiempo, respectivamente. Puede describir los datos como datos que tienen el formato "CBT" (canal, lote, tiempo).

Puede especificar varias dimensiones etiquetadas "S" o "U". Puede utilizar las etiquetas "C", "B" y "T" como máximo una vez cada una. El software ignora las dimensiones únicas "U" restantes tras la segunda dimensión.

Si los datos de entrada no son un objeto dlarray con formato, debe especificar la opción DataFormat.

Para obtener más información, consulte Deep Learning Data Formats.

Tipos de datos: char | string

Desde R2023a

Modo de la puerta de restablecimiento, especificado como uno de estos valores:

  • "after-multiplication": aplica la puerta de restablecimiento después de la multiplicación de matrices. Esta opción es compatible con cuDNN.

  • "before-multiplication": aplica la puerta de restablecimiento antes de la multiplicación de matrices.

  • "recurrent-bias-after-multiplication": aplica la puerta de restablecimiento después de la multiplicación de matrices y utiliza un conjunto adicional de términos de sesgo para los pesos recurrentes.

Para obtener más información sobre los cálculos de la puerta de restablecimiento, consulte Gated Recurrent Unit Layer en la página de referencia gruLayer.

Desde R2024a

Función de activación para actualizar el estado oculto, especificada como uno de estos valores:

  • "tanh": usa la función tangente hiperbólica (tanh).

  • "softsign": usa la función softsign softsign(x)=x1+|x|.

  • "relu" (desde R2024b): usa la función de unidad lineal rectificada (ReLU) ReLU(x)={x,x>00,x0.

El software usa esta opción como la función σs en los cálculos para actualizar el estado oculto.

Para obtener más información, consulte Gated Recurrent Unit Layer en la página de referencia gruLayer.

Desde R2024a

Función de activación que se aplicará a las puertas, especificada como uno de estos valores:

  • "sigmoid": usa la función sigmoide, σ(x)=(1+ex)1.

  • "hard-sigmoid": usa la función sigmoide estricta,

    σ(x)={00.2x+0.51if x<2.5if2.5x2.5if x>2.5.

    .

El software usa esta opción como la función σg en los cálculos de las puertas de capa.

Para obtener más información, consulte Gated Recurrent Unit Layer en la página de referencia gruLayer.

Argumentos de salida

contraer todo

Salida de GRU, devuelta como un objeto dlarray. La salida Y contiene el mismo tipo de datos subyacentes que la entrada X.

Si los datos de entrada de X son un objeto dlarray con formato, Y tiene el mismo formato de dimensión que X, excepto en el caso de las dimensiones "S". Si los datos de entrada no son un objeto dlarray con formato, Y es un objeto dlarray sin formato con el mismo orden de dimensiones que los datos de entrada.

El tamaño de la dimensión "C" de Y es el mismo que el tamaño de las unidades ocultas, especificado por el tamaño de la dimensión "C" de H0.

Vector de estado oculto para cada observación, devuelto como un objeto dlarray o un arreglo numérico con el mismo tipo de datos que H0.

Si la entrada H0 es un objeto dlarray con formato, la salida hiddenState es un objeto dlarray con el formato "CB".

Más acerca de

contraer todo

Referencias

[1] Cho, Kyunghyun, Bart Van Merriënboer, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Holger Schwenk, and Yoshua Bengio. "Learning phrase representations using RNN encoder-decoder for statistical machine translation." arXiv preprint arXiv:1406.1078 (2014).

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2020a

expandir todo