2017-12-20 8 views
2

Das folgende Modellkeras bidirektionale Schicht mit benutzerdefinierter RNN Zelle

lstm_model = Sequential() 
lstm_model.add(embedding) 
tensor_lstm_cell = TensorLSTMCell(hidden_size=lstm_size, num_units=4) 
lstm_model.add(Bidirectional(RNN(tensor_lstm_cell, return_sequences=True))) 

führt den folgenden Fehler: ValueError: Unknown layer: TensorLSTMCell, so scheint es, von dem bidirektionalen Laden zu kommen, um es von config. Ich frage mich, wie kann ich die model.add Funktionalität verwenden, um eine benutzerdefinierte rnn Schicht auf die bidirektionale Wrapper

Antwort

2

Sie können CustomObjectScope hinzufügen verwenden, um die Bidirectional Linie zu wickeln, so dass es Ihre benutzerdefinierten Objekt TensorLSTMCell erkennen kann. Zum Beispiel

from keras.utils.generic_utils import CustomObjectScope 

class DummyLSTMCell(LSTMCell): 
    pass 

embedding = Embedding(10000, 32, input_shape=(None,)) 

lstm_model = Sequential() 
lstm_model.add(embedding) 
lstm_cell = DummyLSTMCell(32) 
with CustomObjectScope({'DummyLSTMCell': DummyLSTMCell}): 
    lstm_model.add(Bidirectional(RNN(lstm_cell, return_sequences=True))) 
+0

cool !! Wird das "Pickle" oder "Serialisieren" Probleme beim Speichern/Laden von Modellen lösen? –

+0

Ich denke, Beizen ist ein anderes Problem. Keras-Modelle enthalten Objekte, die nicht gebeizt werden können. Die Verwendung von 'CustomObjectScope' kann hier nicht helfen. –