Unten ist die vereinfachte Version des Problems, das ich habe.Masking Nullen in Keras Einbettschicht
Beispieldaten:
X = np.round(np.random.rand(10, 10) * 10).astype(np.int32)
y = np.round(np.random.rand(10)).astype(np.int32)
Modell:
i = Input(shape=(10,), name='sentence_input', dtype='int32')
x = Embedding(1000, 10, mask_zero=True)(i)
o = LSTM(10)(x)
enc_model = Model(i, o)
i2 = Input(shape=(10,), dtype='int32')
x2 = enc_model(i2)
o2 = Dense(1, activation='sigmoid')(x2)
model = Model(i2, o2)
model.compile(optimizer='rmsprop', loss='binary_crossentropy')
model.fit(X, y, epochs=1)
Ich verwende Tensorflow 1.0.1 als Keras Backend. Keras Version 2.0.
ich Maskierung hinzufügen möchten, aber in dem Moment mask_zero=True
hinzugefügt wird, schlägt es mit Fehler:
InvalidArgumentError: You must feed a value for placeholder tensor 'sentence_input_10' with dtype int32
[[Node: sentence_input_10 = Placeholder[dtype=DT_INT32, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
ich aber das Hinzufügen dtype='int32'
auf beiden Input
Schichten wird das Problem beheben.
brauche ich enc_model
als separate Model
Ich bin mir der Regel | vocal | +2 bewusst, aber hier ändert sich nichts. Ich habe ein Beispiel gegeben, das leicht genug ist, damit jeder auf seinem Computer ausführen/experimentieren kann (vorausgesetzt, Sie verwenden Keras 2 und TF 1.0. *). Wenn Sie 1000 zu 12 ändern, ist der Fehler immer noch vorhanden. Übrigens. Ich vermute, dass es sich um einen Keras-Bug handelt, wollte aber nur sicherstellen, dass ich nichts falsch mache. – bartgras
Ich versuchte es ein bisschen herum und es scheint, dass das Problem ist, dass Sie ein Modell als eine Schicht verwenden möchten, die nicht funktioniert. Wenn Sie die Schichten Ihres ersten Modells in die zweite integrieren, scheinen die Schichten nicht das Problem zu sein. Kann ich fragen, warum Sie getrennte Modelle benötigen? Eine Lösung wäre vielleicht, Ihre eigene Keras-Ebene zu schreiben und diese im zweiten Modell zu verwenden. – Paul
Ich brauche es getrennt, weil mein enc_model in 2 separaten Eingängen wiederverwendet wird, die die gleichen Gewichte teilen müssen. Bevor ich versucht habe, es mit Sequential neu zu schreiben, gibt es immer noch den gleichen Fehler. Der Code basiert auf https://keras.io/getting-started/functional-api-guide/, Beispielcode-Snippet namens "Shared Vision Model". Ich mache genau das gleiche und es funktioniert bis Maskierung hinzugefügt wird. – bartgras