Main Content

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 una operación LSTM dentro de un objeto dlnetwork, use lstmLayer.

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(___,Name=Value) especifica opciones adicionales con uno o más argumentos nombre-valor.

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);
X = 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.

[Y,hiddenState,cellState] = lstm(X,H0,C0,weights,recurrentWeights,bias);

Visualice el tamaño y las dimensiones de la salida.

size(Y)
ans = 1×3

     3    32    64

dims(Y)
ans = 
'CBT'

Visualice el tamaño de los estados oculto y de celda.

size(hiddenState)
ans = 1×2

     3    32

size(cellState)
ans = 1×2

     3    32

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 la opción DataFormat. 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.

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.

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.

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.

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.

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".

Argumentos de par nombre-valor

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, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: Y = lstm(X,H0,C0,weights,recurrentWeights,bias,DataFormat="CTB") aplica la operación de LSTM 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 contiene un lote de secuencias, donde la primera, la segunda y la tercera dimensión corresponden a canales, observaciones y unidades de tiempo, respectivamente. Puede especificar que este arreglo tenga el formato "CBT" (canal, lote, tiempo).

Puede especificar varias dimensiones etiquetadas "S" o "U". Puede utilizar las etiquetas "C", "B" y "T" como mucho una vez. 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 R2024a

Función de activación para actualizar el estado oculto y de celda, 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": 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 σc en los cálculos para actualizar el estado oculto y de celda.

Para obtener más información, consulte la definición de Long Short-Term Memory Layer en la página de referencia lstmLayer.

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 la definición de Long Short-Term Memory Layer en la página de referencia lstmLayer.

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'.

Algoritmos

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.

Formatos de arreglos de deep learning

La mayoría de las redes y funciones de deep learning operan de forma distinta en diferentes dimensiones de los datos de entrada.

Por ejemplo, una operación de LSTM itera sobre la dimensión de tiempo de los datos de entrada, mientras que una operación de normalización de lote normaliza sobre la dimensión de lote de los datos de entrada.

Para proporcionar datos de entrada con dimensiones etiquetadas o con información de formato adicional, puede usar formatos de datos.

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 contiene un lote de secuencias, donde la primera, la segunda y la tercera dimensión corresponden a canales, observaciones y unidades de tiempo, respectivamente. Puede especificar que este arreglo tenga el formato "CBT" (canal, lote, tiempo).

Para crear datos de entrada con formato, cree un objeto dlarray y especifique el formato mediante el segundo argumento.

Para proporcionar información de formato adicional con datos que no tienen formato, especifique el formato mediante el argumento FMT.

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

Capacidades ampliadas

Historial de versiones

Introducido en R2019b

expandir todo