2017-07-14 1 views
4

Je suis en mesure d'entraîner avec succès mon état LSTM en utilisant keras. Ma taille du lot est de 60 et toutes les entrées que je vous envoie dans le réseau est divisible par batch_size Suite est mon extrait:Stateful LSTM ne peut pas prédire en raison de problème batch_size

model = Sequential() 
model.add(LSTM(80,input_shape = trainx.shape[1:],batch_input_shape=(60, 
trainx.shape[1], trainx.shape[2]),stateful=True,return_sequences=True)) 
model.add(Dropout(0.15)) 
model.add(LSTM(40,return_sequences=False)) 
model.add(Dense(40)) 
model.add(Dropout(0.3)) 
model.add(Dense(output_dim=1)) 
model.add(Activation("linear")) 
keras.optimizers.RMSprop(lr=0.005, rho=0.9, epsilon=1e-08, decay=0.0) 
model.compile(loss="mse", optimizer="rmsprop") 

Ma ligne de formation qui se déroule avec succès:

model.fit(trainx[:3000,:],trainy[:3000],validation_split=0.1,shuffle=False,nb_epoch=9,batch_size=60) 

Maintenant, j'essaie de prédire sur l'ensemble de test qui est encore divisible par 60, mais je reçois erreur:

ValueError: In a stateful network, you should only pass inputs with a number of samples that can be divided by the batch size. Found: 240 samples. Batch size: 32.

Quelqu'un peut-il me dire ce qui ne va pas au-dessus? Je suis confus, j'ai essayé tant de choses mais rien n'y fait.

Répondre

4

Je suppose que la raison de l'erreur est que vous n'avez pas spécifié la taille du lot dans model.predict. Comme vous pouvez le voir dans le documentation dans la section « prédire », les paramètres par défaut sont

model.predict(self, x, batch_size=32, verbose=0) 

qui est la raison pour laquelle 32 apparaît dans votre message d'erreur. Vous devez donc spécifier batch_size=60 dans model.predict.

+0

Merci, je pense qu'il sera évident pour le modèle de se souvenir de la taille du lot, il a été formé sur – Harshit