2017-04-07 2 views
2

J'essaie de mettre en œuvre un modèle plusieurs à un où les entrées sont des vecteurs de mots de taille d. J'ai besoin de sortir un vecteur de taille d à la fin de LSTM.Beaucoup à une implémentation dans keras

enter image description here

Dans ce question, il est mentionné à utiliser (pour plusieurs à un modèle)

model = Sequential() 
model.add(LSTM(1, input_shape=(timesteps, data_dim))) 

Je suis toujours sceptique quant à la façon de spécifier l'entrée et des dimensions plus sortie importante dans les keras modèle

Répondre

1

Le code que vous avez fourni est en réalité pour one-to-many scénario - mais pour la sortie de taille 1. Si vous voulez avoir une sortie de taille d vous devez essayer le code suivant:

model = Sequential() 
model.add(LSTM(d, input_shape=(len_seq, d))) 

De plus - avec des vecteurs de mots je vous conseille fortement d'utiliser Embedding couche qui est conçue pour votre cas d'utilisation. Utilisez-le comme une entrée à votre LSTM puis.

+0

Je pense que le code que j'ai donné est valide pour beaucoup à un cas où à chaque entrée de timestep est un entier et sorties LSTM un et seulement une sortie qui est à la fin. Alors, ne devrait-il pas s'agir d'un code plusieurs-à-un? – MysticForce

+0

@MysticForce avez-vous trouvé une solution? luttant avec le même problème. –

0

entrée est un tenseur 3D de forme (batch_size, Timesteps, input_dims)

Il ressemblera à quelque chose comme ceci:

batch_input = np.empty([batch_size] + [timesteps] + [d]) 

Il y aura une sortie (la dernière séquence) parce que « return_state = False 'in keras par défaut.

La forme de sortie sera:

(batch_size, 1) 

Parce que vous ne disposez que d'une unité dans votre LSTM. Si vous voulez une sortie avec « d » dimensions, alors vous devez changer LSTM pour

LSTM(d, input_shape=(timesteps, data_dim))