2017-07-14 3 views
4

Ich bin in der Lage, erfolgreich meine Stateful LSTM Keras trainieren. Meine Chargengröße 60 ist und jeder Eingang I in das Netzwerk zu senden bin teilbar durch batch_size Es folgt mein Snippet:Stateful LSTM schlägt fehl, aufgrund von Batch-Size-Problem

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

Meine Trainingsleitung, die erfolgreich ausgeführt wird:

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

Jetzt versuche ich, vorherzusagen auf Test-Set, das wieder durch 60 teilbar ist, aber ich bekomme Fehler:

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.

Kann mir jemand sagen, was oben falsch ist? Ich bin verwirrt, habe so viele Dinge probiert, aber nichts hilft.

Antwort

4

Ich vermute, dass der Grund für den Fehler ist, dass Sie die Losgröße in model.predict nicht angegeben haben. Wie Sie in der documentation in der „vorhersagen“ Abschnitt sehen können, sind die Standardparameter

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

weshalb 32 erscheint in der Fehlermeldung ist. Sie müssen also batch_size=60 in model.predict angeben.

+0

Danke, ich dachte, es wird offensichtlich sein, dass sich das Modell an die Chargengröße erinnert, an der es trainiert wurde – Harshit

Verwandte Themen