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