En Keras LSTM(n)
significa "crear una capa LSTM que consta de unidades LSTM. La siguiente imagen muestra qué capa y unidad (o neurona) son, y la imagen de la derecha muestra la estructura interna de una sola unidad LSTM.
La siguiente imagen muestra cómo funciona toda la capa LSTM.
Como sabemos, una capa LSTM procesa una secuencia, es decir, X1, ... ,Xnorte. En cada pasot la capa (cada neurona) toma la entrada Xt, salida del paso anterior ht - 1y sesgo siy genera un vector ht. Coordenadas deht son salidas de las neuronas / unidades y, por lo tanto, el tamaño del vector htes igual al número de unidades / neuronas. Este proceso continúa hastaXnorte.
Ahora vamos a calcular el número de parámetros para LSTM(1)
y LSTM(3)
y compararlo con lo que se muestra Keras cuando llamamos model.summary()
.
Dejar i n p ser el tamaño del vector Xt y o u t ser el tamaño del vector ht(este también es el número de neuronas / unidades). Cada neurona / unidad toma el vector de entrada, la salida del paso anterior y un sesgo que hacei n p + o u t + 1parámetros (pesos). Pero tenemoso u t número de neuronas y así tenemos o u t × ( i n p + o u t + 1 )parámetros Finalmente, cada unidad tiene 4 pesos (ver la imagen de la derecha, cuadros amarillos) y tenemos la siguiente fórmula para el número de parámetros:
4 o u t ( i n p + o u t + 1 )
Comparemos con lo que produce Keras.
Ejemplo 1.
t1 = Input(shape=(1, 1))
t2 = LSTM(1)(t1)
model = Model(inputs=t1, outputs=t2)
print(model.summary())
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) (None, 1, 1) 0
_________________________________________________________________
lstm_2 (LSTM) (None, 1) 12
=================================================================
Total params: 12
Trainable params: 12
Non-trainable params: 0
_________________________________________________________________
El número de unidades es 1, el tamaño del vector de entrada es 1, entonces 4 × 1 × ( 1 + 1 + 1 ) = 12.
Ejemplo 2
input_t = Input((4, 2))
output_t = LSTM(3)(input_t)
model = Model(inputs=input_t, outputs=output_t)
print(model.summary())
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_6 (InputLayer) (None, 4, 2) 0
_________________________________________________________________
lstm_6 (LSTM) (None, 3) 72
=================================================================
Total params: 72
Trainable params: 72
Non-trainable params: 0
El número de unidades es 3, el tamaño del vector de entrada es 2, entonces 4 × 3 × ( 2 + 3 + 1 ) = 72