Je voudrais comprendre comment un RNN, en particulier un LSTM, fonctionne avec plusieurs dimensions d'entrée en utilisant Keras et Tensorflow. Je veux dire la forme d'entrée est (batch_size, timesteps, input_dim) où input_dim> 1.
Je pense que les images ci-dessous illustrent assez bien le concept de LSTM si input_dim = 1.
Cela signifie-t-il si input_dim> 1 alors x est pas une seule valeur plus mais un tableau? Mais si c'est comme ça alors les poids sont aussi devenus des tableaux, la même forme que x + le contexte?Entrée multidimensionnelle pour LSTM dans Keras
Répondre
Keras crée un graphique de calcul qui exécute la séquence dans votre image de fond par fonction (mais pour toutes les unités). Cela signifie que la valeur d'état C est toujours un scalaire, un par unité. Il ne traite pas les fonctions à la fois, il traite les unités à la fois et les fonctionnalités séparément.
import keras.models as kem
import keras.layers as kel
model = kem.Sequential()
lstm = kel.LSTM(units, input_shape=(timesteps, features))
model.add(lstm)
model.summary()
free_params = (4 * features * units) + (4 * units * units) + (4 * num_units)
print('free_params ', free_params)
print('kernel_c', lstm.kernel_c.shape)
print('bias_c', lstm.bias_c .shape)
où 4
représente une pour chacun des f, i, c, et o les chemins internes de votre image de fond. Le premier terme est le nombre de poids pour le noyau, le second terme pour le noyau récurrent, et le dernier pour le biais, s'il est appliqué. Pour
units = 1
timesteps = 1
features = 1
on voit
Layer (type) Output Shape Param #
=================================================================
lstm_1 (LSTM) (None, 1) 12
=================================================================
Total params: 12.0
Trainable params: 12
Non-trainable params: 0.0
_________________________________________________________________
num_params 12
kernel_c (1, 1)
bias_c (1,)
et
units = 1
timesteps = 1
features = 2
nous voyons
Layer (type) Output Shape Param #
=================================================================
lstm_1 (LSTM) (None, 1) 16
=================================================================
Total params: 16.0
Trainable params: 16
Non-trainable params: 0.0
_________________________________________________________________
num_params 16
kernel_c (2, 1)
bias_c (1,)
où bias_c
est un indicateur de la forme de sortie de l'état C. Remarque qu'il y a différents implémentations concernant la fabrication interne de l'unité. Les détails sont ici (http://deeplearning.net/tutorial/lstm.html) et l'implémentation par défaut utilise Eq.7. J'espère que cela t'aides.
Je me bats encore. Je comprends maintenant que C a une forme (caractéristiques, unités). Donc à l'intérieur d'une unité Ct a une forme (caractéristiques, 1). La sortie de l'unité est Yt avec la forme (1,1), non? Cela signifie que si j'ai 2 caractéristiques, cela change (2,1) à (1,1) quelque part. Je manque cette étape. – Manngo