Ich habe eine Liste der markierten Sätze. I umgewandelt jeder von ihnen in der folgenden Art und Weise:Keras: Einbetten und LSTM Ebenen für POS-Tagging-Aufgabe
- Für jedes Wort , erhält die relative One-Hot-Kodierung Form (ein Vektor der Dimension
input_dim
); - Fügen Sie ein Pre-Padding wie im folgenden Beispiel beschrieben ein;
- Teilen Sie jeden Satz in
len(sentence)
Sub-Sätze, mit einem Fenster der Größetime_steps
(um den Kontext für die Vorhersage des nächsten Wortes zu bekommen).
Zum Beispiel mit time_steps=2
, ein einziger Satz ["this", "is", "an", "example"]
in umgewandelt wird:
[
[one_hot_enc("empty_word"), one_hot_enc("empty_word")],
[one_hot_enc("empty_word"), one_hot_enc("this")],
[one_hot_enc("this"), one_hot_enc("is")],
[one_hot_enc("is"), one_hot_enc("an")],
]
Am Ende unter Berücksichtigung der Untersätze als eine einzigartige Liste, die Form der Zugdaten X_train
ist (num_samples, time_steps, input_dim)
, wo:
input_dim
: die Größe meines Vokabulars;time_steps
: die Länge der Sequenz in LSTM zu verwenden;num_samples
: die Anzahl der Stichproben (Untersätze);
Jetzt möchte ich eine Embedding
Schicht verwenden, um jedes Wort zu einem kleineren einem kontinuierlichen dreidimensionalen Raum abzubilden, und eine LSTM
, in denen ich die Kontexte, wie oben bauen.
habe ich versucht, so etwas wie dieses:
model = Sequential()
model.add(InputLayer(input_shape=(time_steps, input_dim)))
model.add(Embedding(input_dim, embedding_size, input_length=time_steps))
model.add(LSTM(32))
model.add(Dense(output_dim))
model.add(Activation('softmax'))
Aber gibt mir die folgende Fehlermeldung:
ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
Was ich dabei? Es gibt einen logischen Fehler in dem, was ich versuche zu tun?