2016-07-07 11 views
1

Ich versuche in Keras ein Sprachmodell auf Wortebene zu trainieren.Eingabeform für Keras LSTM/GRU Sprachmodell

Ich habe meine X und Y, die beide mit der Form (90582L, 517L)

Als ich dieses Modell versuchen passen:

print('Build model...') 
model = Sequential() 
model.add(GRU(512, return_sequences=True, input_shape=(90582, 517))) 
model.add(Dropout(0.2)) 
model.add(GRU(512, return_sequences=True)) 
model.add(Dropout(0.2)) 
model.add(TimeDistributedDense(1)) 
model.add(Activation('softmax')) 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop') 
model.fit(x_pad, y_pad, batch_size=128, nb_epoch=2) 

ich den Fehler:

Exception: Error when checking model input: 
expected gru_input_7 to have 3 dimensions, but got array with shape (90582L, 517L) 

Ich brauche eine Anleitung, wie die Eingabeform sein sollte? Ich habe Versuche und Fehler in allen möglichen Kombinationen gemacht, aber es scheint, dass ich etwas Grundlegendes falsch verstehe.

Im Keras-Texterstellungsbeispiel hatte die X-Matrix drei Dimensionen. Ich habe keine Ahnung, was die dritte Dimension sein soll.

Antwort

3

Es hängt davon ab, was Sie versuchen zu tun. Ich nehme an, dass Ihre Formdaten (90582, 517) eine Menge von 90582 Stichproben mit jeweils 517 Wörtern sind. Wenn ja, müssen Sie Ihre Wörter in Wortvektoren (= Einbettungen) umwandeln, damit sie sinnvoll sind. Dann haben Sie die Form (90582, 517, embedding_dim), die von der GRU gehandhabt werden kann.

Die Keras Embedding layer kann das für Sie tun. Fügen Sie es als erste Schicht Ihres Neuronalen Netzwerks vor der ersten GRU-Ebene hinzu.

vocabulary_size = XXXXX  # give your vocabulary size here (largest word ID in the input) 
embedding_dim = XXXX  # give your embedding dimension here (e.g. 100) 

print('Build model...') 
model = Sequential() 
model.add(Embedding(vocabulary_size, embedding_dim, input_shape=(90582, 517))) 
model.add(GRU(512, return_sequences=True)) 
model.add(Dropout(0.2)) 
model.add(GRU(512, return_sequences=True)) 
model.add(Dropout(0.2)) 
model.add(TimeDistributedDense(1)) 
model.add(Activation('softmax')) 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop') 
model.fit(x_pad, y_pad, batch_size=128, nb_epoch=2)