In Keras LSTM(n)
significa "creare un livello LSTM costituito da unità LSTM. L'immagine seguente mostra quale livello e unità (o neurone) sono, e l'immagine più a destra mostra la struttura interna di una singola unità LSTM.
L'immagine seguente mostra come funziona l'intero livello LSTM.
Come sappiamo, un livello LSTM elabora una sequenza, ovvero x1,…,xN. Ad ogni passot lo strato (ogni neurone) accetta l'input xt, output dal passaggio precedente ht−1e pregiudizio be genera un vettore ht. Coordinate diht sono uscite dei neuroni / unità, e quindi la dimensione del vettore htè uguale al numero di unità / neuroni. Questo processo continua fino alxN.
Ora cerchiamo di calcolare il numero di parametri per LSTM(1)
e LSTM(3)
e confrontate con quella spettacoli Keras quando chiamiamo model.summary()
.
Permettere inp essere la dimensione del vettore xt e out essere la dimensione del vettore ht(questo è anche il numero di neuroni / unità). Ogni neurone / unità prende il vettore di input, l'output dal passaggio precedente e un bias che rendeinp+out+1parametri (pesi). Ma noi abbiamoout numero di neuroni e così abbiamo out×(inp+out+1)parametri. Infine ogni unità ha 4 pesi (vedi l'immagine più a destra, caselle gialle) e abbiamo la seguente formula per il numero di parametri:
4out(inp+out+1)
Confrontiamo con ciò che produce Keras.
Esempio 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
_________________________________________________________________
Il numero di unità è 1, la dimensione del vettore di input è 1, quindi 4×1×(1+1+1)=12.
Esempio 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
Il numero di unità è 3, la dimensione del vettore di input è 2, quindi 4×3×(2+3+1)=72