Saltar al contenido

En Keras, ¿qué estoy configurando exactamente cuando creo una capa `LSTM` con estado con N `unidades`?

Verificamos de forma completamente cada una de las reseñas en nuestra página web con el objetivo de enseñarte en todo momento información con la mayor veracidad y actual.

Solución:

Puede consultar esta pregunta para obtener más información, aunque se basa en la API de Keras-1.x.

Básicamente, el unit significa la dimensión de las celdas internas en LSTM. Debido a que en LSTM, la dimensión de la celda interna (C_t y C_t-1 en el gráfico), la máscara de salida (o_t en el gráfico) y el estado oculto/de salida (h_t en el gráfico) deben tener el MISMO dimensión, por lo tanto, la dimensión de su salida debe ser unit-longitud también.

Y LSTM en Keras solo definen exactamente un bloque LSTM, cuyas celdas son de unit-longitud. si configuras return_sequence=Truedevolverá algo con forma: (batch_size, timespan, unit). Si falseluego solo devuelve la última salida en forma (batch_size, unit).

En cuanto a la entrada, debe proporcionar una entrada para cada marca de tiempo. Básicamente, la forma es como (batch_size, timespan, input_dim)dónde input_dim puede ser diferente de la unit. Si solo desea proporcionar una entrada en el primer paso, simplemente puede rellenar sus datos con ceros en otros pasos de tiempo.

¿Significa eso que realmente existe N de estas unidades LSTM en la capa LSTM, o tal vez que exactamente una unidad LSTM se ejecuta para N iteraciones que generan N de estas h?[t] valores, de, digamos, h[t-N] hasta h[t]?

Primero es true. En esa capa Keras LSTM hay N unidades o celdas LSTM.

keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False) 

Si planea crear una capa LSTM simple con 1 celda, terminará con esto:
ingrese la descripción de la imagen aquí


Y este sería tu modelo.

N=1
model = Sequential()
model.add(LSTM(N))

Para los otros modelos necesitarías N>1
ingrese la descripción de la imagen aquí

Cuántas instancias de “cadenas LSTM”

La explicación intuitiva adecuada del parámetro ‘unidades’ para las redes neuronales recurrentes de Keras es que con units=1 obtienes un RNN como se describe en los libros de texto, y con units=n obtienes una capa que consiste en n copias independientes de dicho RNN: tendrán una estructura idéntica, pero como se inicializarán con diferentes pesos, calcularán algo diferente.

Alternativamente, puede considerar que en un LSTM con units=1 la key los valores (f, i, C, h) son escalares; y con units=n serán vectores de longitud n.

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *