In Keras LSTM(n)bedeutet "Erstellen einer LSTM-Schicht, die aus LSTM-Einheiten besteht". Das folgende Bild zeigt, was Schicht und Einheit (oder Neuron) sind, und das Bild ganz rechts zeigt die interne Struktur einer einzelnen LSTM-Einheit.

Das folgende Bild zeigt, wie die gesamte LSTM-Schicht funktioniert.

Wie wir wissen, verarbeitet eine LSTM-Schicht eine Sequenz, dh . Bei jedem Schritt die Schicht (jedes Neuron) die Eingabe , die Ausgabe aus dem vorherigen Schritt und die Vorspannung und gibt einen Vektor . Die Koordinaten von sind Ausgaben der Neuronen / Einheiten, und daher ist die Größe des Vektors gleich der Anzahl der Einheiten / Neuronen. Dieser Vorgang wird bis fortgesetzt . t x t H t - 1 b H t H t H t x Nx1, … , X.N.txtht - 1bhththtxN.
Berechnen wir nun die Anzahl der Parameter für LSTM(1)und LSTM(3)und vergleichen sie mit dem, was Keras beim Aufruf anzeigt model.summary().
Sei die Größe des Vektors und die Größe des Vektors (dies ist auch die Anzahl der Neuronen / Einheiten). Jedes Neuron / jede Einheit nimmt einen Eingabevektor, eine Ausgabe aus dem vorherigen Schritt und eine Vorspannung, die Parameter (Gewichte) . Aber wir haben Anzahl von Neuronen und so haben wir Parameter. Schließlich hat jede Einheit 4 Gewichte (siehe Bild ganz rechts, gelbe Kästchen) und wir haben die folgende Formel für die Anzahl der Parameter:
x t o u t h t i n p + o u t + 1 O u t o u t × ( i n p + o u t + 1 ) 4 O u t ( i n p + o u t + 1 )i n pxtÖ u thti n p + o u t + 1o u to u t × ( i n p + o u t + 1 )
4 o u t ( i n p + o u t + 1 )
Vergleichen wir mit den Keras-Ausgaben.
Beispiel 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
_________________________________________________________________
4 × 1 × ( 1 + 1 + 1 ) = 12
Beispiel 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
4 × 3 × ( 2 + 3 + 1 ) = 72