Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

lstm

Memoria de corto-largo plazo

Desde R2019b

Descripción

La operación de memoria de corto-largo plazo (LSTM) permite que una red aprenda dependencias a largo plazo entre unidades de tiempo de series de tiempo y datos secuenciales.

Nota

Esta función aplica la operación LSTM de deep learning a los datos de un dlarray. Si desea aplicar la operación LSTM dentro de un objeto layerGraph o un arreglo Layer, utilice la capa siguiente:

ejemplo

Y = lstm(X,H0,C0,weights,recurrentWeights,bias) aplica un cálculo de memoria de corto-largo plazo (LSTM) a la entrada X empleando el estado oculto inicial H0, el estado de celda inicial C0 y los parámetros weights, recurrentWeights y bias. La entrada X debe ser un dlarray con formato. La salida Y es un dlarray con formato con el mismo formato de dimensión que X, excepto en el caso de las dimensiones 'S'.

La función lstm actualiza la celda y los estados ocultos empleando la función tangente hiperbólica (tanh) como la función de activación del estado. La función lstm utiliza la función sigmoide dada por σ(x)=(1+ex)1 como la función de activación de la puerta.

[Y,hiddenState,cellState] = lstm(X,H0,C0,weights,recurrentWeights,bias) también devuelve el estado oculto y el estado de la celda tras la operación LSTM.

[___] = lstm(___,'DataFormat',FMT) también especifica el formato de dimensión FMT donde X no es un dlarray con formato. La salida Y es un dlarray sin formato con el mismo orden de dimensión que X, excepto en el caso de las dimensiones 'S'.

Ejemplos

contraer todo

Lleve a cabo una operación LSTM con tres 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);
dlX = dlarray(X,'CBT');

Cree los estados ocultos y celulares iniciales con 3 unidades ocultas. Utilice el mismo estado oculto y el mismo estado de celda iniciales para todas las observaciones.

numHiddenUnits = 3;
H0 = zeros(numHiddenUnits,1);
C0 = zeros(numHiddenUnits,1);

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

weights = dlarray(randn(4*numHiddenUnits,numFeatures),'CU');
recurrentWeights = dlarray(randn(4*numHiddenUnits,numHiddenUnits),'CU');
bias = dlarray(randn(4*numHiddenUnits,1),'C');

Realice el cálculo LSTM.

[dlY,hiddenState,cellState] = lstm(dlX,H0,C0,weights,recurrentWeights,bias);

Visualice el tamaño y las dimensiones de dlY.

size(dlY)
ans = 1×3

     3    32    64

dlY.dims
ans = 
'CBT'

Visualice el tamaño de hiddenState y cellState.

size(hiddenState)
ans = 1×2

     3    32

size(cellState)
ans = 1×2

     3    32

Compruebe que la salida hiddenState sea la misma que la última unidad de tiempo de salida dlY.

if extractdata(dlY(:,:,end)) == hiddenState
   disp("The hidden state and the last time step are equal.");
else 
   disp("The hidden state and the last time step are not equal.")
end
The hidden state and the last time step are equal.

Puede utilizar el estado oculto y el estado de celda para hacer un seguimiento del estado de la operación LSTM e introducir datos secuenciales adicionales.

Argumentos de entrada

contraer todo

Datos de entrada, especificados como un arreglo dlarray con formato, un arreglo dlarray sin formato o un arreglo numérico. Cuando X no es un dlarray con formato, debe especificar el formato de etiqueta de dimensión con 'DataFormat',FMT. Si X es un arreglo numérico, al menos uno de H0, C0, weights, recurrentWeights o bias debe ser un 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 arreglo dlarray con formato, un arreglo dlarray sin formato o un arreglo numérico.

Si H0 es un 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.

El tamaño de la dimensión 'C' determina el número de unidades ocultas. El tamaño de la dimensión 'C' de H0 debe ser igual que el tamaño de las dimensiones 'C' de C0.

Si H0 no es un dlarray con formato, el tamaño de la primera dimensión determina el número de unidades ocultas y debe tener el mismo tamaño que la primera dimensión o la dimensión 'C' de C0.

Tipos de datos: single | double

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

Si C0 es un 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 C0 no cuenta con una dimensión 'B', la función utiliza el mismo vector de estado de celda para cada observación en X.

El tamaño de la dimensión 'C' determina el número de unidades ocultas. El tamaño de la dimensión 'C' de C0 debe ser igual que el tamaño de las dimensiones 'C' de H0.

Si C0 no es un dlarray con formato, el tamaño de la primera dimensión determina el número de unidades ocultas y debe tener el mismo tamaño que la primera dimensión o la dimensión 'C' de H0.

Tipos de datos: single | double

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

Especifique weights como una matriz con un tamaño de 4*NumHiddenUnits por InputSize, donde NumHiddenUnits es el tamaño de la dimensión 'C' de C0 y H0, y 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 dlarray con formato, debe contener una dimensión 'C' con un tamaño de 4*NumHiddenUnits y una dimensión 'U' con un tamaño de InputSize.

Tipos de datos: single | double

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

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

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

Tipos de datos: single | double

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

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

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

Tipos de datos: single | double

Orden de las dimensiones de los datos de entrada sin formato, especificado como el par separado por comas que consta de 'DataFormat' y un arreglo de caracteres o una cadena FMT que proporciona una etiqueta para cada dimensión de los datos. Los caracteres de FMT deben ser uno de los siguientes:

  • 'S': espacial

  • 'C': canal

  • 'B': lote (por ejemplo, muestras y observaciones)

  • 'T': tiempo (por ejemplo, secuencias)

  • 'U': sin especificar

Puede especificar varias dimensiones etiquetadas 'S' o 'U'. Puede utilizar las etiquetas 'C', 'B' y 'T' como mucho una vez.

Debe especificar 'DataFormat',FMT cuando los datos de entrada no son un dlarray con formato.

Ejemplo: 'DataFormat','SSCB'

Tipos de datos: char | string

Argumentos de salida

contraer todo

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

Si los datos de entrada de X son un 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 arreglo dlarray con formato, Y es un arreglo 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 o C0.

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

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

Vector de estado de celda para cada observación, devuelto como un dlarray o un arreglo numérico. cellState se devuelve con el mismo tipo de datos que C0.

Si la entrada C0 es un dlarray con formato, la salida cellState se devuelve como un dlarray con el formato 'CB'.

Más acerca de

contraer todo

Memoria de corto-largo plazo

La operación LSTM permite que una red aprenda dependencias a largo plazo entre unidades de tiempo de series de tiempo y datos secuenciales. Para obtener más información, consulte la definición de Long Short-Term Memory Layer en la página de referencia lstmLayer.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b