2017-10-17 9 views
1

J'ai des données de test de 1025643 entrées et 72 caractéristiques/attributs. J'ai formé un lstm avec le train de données d'entréeX avec la forme (245, 30, 72) et le trainY avec la forme (245,). Notez également que j'ai spécifié rétrospective à 30 pas d'ici (245, 30, 72) forme de trainX.Output_shape du modèle lstm

Maintenant, après la formation du modèle si je

model.output_shape

La sortie est:

(Aucun, 1)

Ce que je comprends est qu'il donnera prédiction en une étape pour l'ensemble de test. Mais je veux que ce soit 30 rangées de prédictions, une pour chaque étape future, pour chaque rangée dans l'ensemble de test (comme la sortie devrait avoir la forme dans mon cas pour être (1025643, 30, 1)). Quels changements dois-je faire avec les formes de données? J'utilise keras lstm avec le backend tensorflow et python 3.6.

code

pour mon modèle est:

model = Sequential() 
model.add(LSTM(100, return_sequences=True, input_shape = (trainX.shape[1], trainX.shape[2]))) 
model.add(LSTM(100, return_sequences = False)) 
model.add(Dense(1, activation='linear')) 

model.compile(loss='mse', optimizer='adam') 

model.fit(trainX, trainY, epochs=50, shuffle=False, verbose=1) 

Répondre

1

Le paramètre return_sequences=False sur la dernière couche LSTM provoque la LSTM pour retourner uniquement la sortie après les 30 pas de temps. Si vous voulez 30 sorties (une après chaque pas de temps), utilisez return_sequences=True sur la dernière couche LSTM, cela donnera une forme de sortie de (None, 30, 1). Pour une explication plus détaillée des LSTM dans Keras, voir here.

+0

Merci beaucoup :) Est-ce que je vais devoir faire des timesteps de 30 pour chaque échantillon dans les données de test pour l'avoir avec la forme (None, 30, 1), parce que le modèle me demande de le faire? Et si je voulais fournir seulement une rangée et que le modèle me donnait une sortie de 30 rangées (30 pas de séquence). comme mes données d'essai ont toujours la forme (1025643, 72) et les résultats que j'ai obtenir la forme (1025643, 30, 1). –

+0

Si je comprends bien, vous voulez fournir une seule étape de saisie et produire les 30 prochaines étapes de sortie. Le LSTM nécessite une entrée pour chaque pas de temps. Pour produire 30 pas de temps de sortie à partir d'une seule entrée, vous pouvez dupliquer la première entrée à chaque pas de temps ou utiliser la sortie du LSTM comme entrée pour l'étape suivante (la dimension d'entrée de votre LSTM ne correspond pas à la sortie, la dernière option n'est pas possible pour votre architecture). –

+0

Oui, l'idée de dupliquer est logique. Merci encore :) –