10

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

LSTM structure

enter image description here

Répondre

2

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) 

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,) 

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.

+0

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