2017-10-07 2 views
0

Je suis nouveau à Keras, et j'ai du mal à comprendre la forme des données d'entrée de la couche LSTM. La documentation de Keras indique que les données d'entrée doivent être en 3D avec une forme (nb_samples, timesteps, input_dim). J'ai de la difficulté à comprendre ce format. La variable timesteps représente-t-elle le nombre de timesteps mémorisés par le réseau?Comment régler l'entrée pour LSTM dans Keras

Dans mes données, quelques pas de temps affectent la sortie du réseau mais je ne sais pas combien d'avance, c'est-à-dire que je ne peux pas dire que les 10 échantillons précédents affectent la sortie. Par exemple, l'entrée peut être des mots qui forment des phrases. Il y a une corrélation importante entre les mots de chaque phrase. Je ne connais pas la longueur de la phrase à l'avance, cette longueur varie également d'une phrase à l'autre. Je sais quand la phrase se termine (c'est-à-dire que j'ai une période qui indique la fin). Deux phrases différentes n'ont aucun effet l'une sur l'autre - il n'est pas nécessaire de se souvenir de la phrase précédente. J'utilise le réseau LSTM pour apprendre une politique d'apprentissage par renforcement, donc je n'ai pas de jeu de données fixe. La politique de l'agent va changer la durée de la phrase.

Comment dois-je façonner mes données? Comment devrait-il être introduit dans la couche Keras LSTM?

+0

Selon vous êtes prêt à dépenser combien de ressources, vous devez choisir une longueur maximale de la peine, puis tronquer/remplir avec 0 tous les exemples à cette longueur. Keras exige qu'il soit réparé. –

+0

Donc, la forme d'entrée devrait-elle être dans ce cas? input_shape = (longueur_sure_ maximale,)? –

+0

Vous devez diviser votre texte en phrases, puis la quantité de phrases que vous avez est votre 'nb_samples'. Le 'timesteps' est le nombre maximum de mots/caractères. Ensuite, 'input_dim' est la taille de la représentation de ces mots/caractères (par exemple, si vous utilisez des plongées de mots, la taille d'incorporation) –

Répondre

1

Les pas de temps correspondent à la longueur totale de votre séquence.

Si vous travaillez avec des mots, c'est la quantité de mots de chaque phrase.
Si vous travaillez avec des caractères, c'est la quantité de caractères de chaque séquence.

une longueur de phrase variable de cas, vous devez définir cette dimension à None:

#for functional API models: 
inputTensor = Input((None,input_dim)) #the nb_samples doesn't participate in this definition 

#for sequential models: 
LSTM(units, input_shape=(None,input_dim)) #the nb_samples doesn't participate in this definition 

Il y a deux façons de travailler avec Longueurs variables en keras.

  • longueur fixe avec un rembourrage
  • longueur variable séparés en lots avec la même longueur

Dans le cas de longueur fixe, vous créez un mot factice/caractère qui n'a pas de sens, et remplissez vos phrases à un longueur maximale, de sorte que toutes les phrases ont la même longueur. Ensuite, vous ajoutez un calque Masking() qui ignorera ce mot/char factice.

Les couches Embedding ont déjà un paramètre mask_zeros, puis, si vous travaillez avec des incorporations, vous pouvez faire de l'id 0 ​​un caractère/mot fictif.

Dans la longueur variable, vous séparez simplement vos données d'entrée dans des lots plus petits, comme ici: Keras misinterprets training data shape