En Keras LSTM(n)
signifie "créer une couche LSTM composée d'unités LSTM. L'image suivante montre ce que sont la couche et l'unité (ou neurone), et l'image la plus à droite montre la structure interne d'une seule unité LSTM.
L'image suivante montre comment fonctionne toute la couche LSTM.
Comme nous le savons, une couche LSTM traite une séquence, c'est-à-dire . À chaque étape la couche (chaque neurone) prend l'entrée , la sortie de l'étape précédente , et le biais , et un vecteur . Les coordonnées de sont des sorties des neurones / unités, et donc la taille du vecteur est égale au nombre d'unités / neurones. Ce processus se poursuit jusqu'à .X1, … ,XNtXtht - 1bhththtXN
Maintenant , nous allons calculer le nombre de paramètres pour LSTM(1)
et LSTM(3)
et le comparer avec ce que montre KERAS quand nous appelons model.summary()
.
Soit la taille du vecteur et la taille du vecteur (c'est aussi le nombre de neurones / unités). Chaque neurone / unité prend un vecteur d'entrée, une sortie de l'étape précédente et un biais qui crée paramètres d' (poids). Mais nous avons certain nombre de neurones et nous avons donc paramètres . Enfin, chaque unité a 4 poids (voir l'image la plus à droite, les cases jaunes) et nous avons la formule suivante pour le nombre de paramètres:
i n pXto 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 )
Comparons avec ce que Keras produit.
Exemple 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
_________________________________________________________________
Le nombre d'unités est 1, la taille du vecteur d'entrée est 1, donc .4 × 1 × ( 1 + 1 + 1 ) = 12
Exemple 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
Le nombre d'unités est 3, la taille du vecteur d'entrée est 2, donc4 × 3 × ( 2 + 3 + 1 ) = 72