2017-03-31 11 views
0

Ich versuche, eine Sequenz zu Sequenz-Encoder-Decoder-Modell zu machen und müssen die letzte Schicht Softmax, um kategorische Kreuz-Entropie verwenden.Wie funktioniert Softmax, wenn LSTM die Sequenz in Keras zurückgibt?

Ich habe versucht, die Aktivierung der letzten LSTM-Ebene auf 'softmax' zu setzen, aber das scheint nicht den Trick zu machen. Das Hinzufügen einer weiteren dichten Ebene und das Setzen der Aktivierung auf softmax hilft ebenfalls nicht. Was ist der richtige Weg, um einen Softmax zu machen, wenn dein letzter LSTM eine Sequenz ausgibt?

inputs = Input(batch_shape=(batch_size, timesteps, input_dim), name='hella') 
encoded = LSTM(latent_dim, return_sequences=True, stateful=False)(inputs) 
encoded = LSTM(latent_dim, return_sequences=True, stateful=False)(encoded) 
encoded = LSTM(latent_dim, return_sequences=True, stateful=False)(encoded) 
encoded = LSTM(latent_dim, return_sequences=False)(encoded) 
decoded = RepeatVector(timesteps)(encoded) 
decoded = LSTM(input_dim, return_sequences=True)(decoded) 
# do softmax here 
sequence_autoencoder = Model(inputs, decoded) 

sequence_autoencoder.compile(loss='categorical_crossentropy', optimizer='adam') 

Antwort

1

es herausgefunden:

Ab Keras 2, können Sie einfach hinzufügen:

TimeDistributed(Dense(input_dim, activation='softmax')) 

TimeDistributed ermöglicht es Ihnen, eine dichte Schicht auf jedem zeitlichen Zeitschritt anzuwenden. Dokumentation finden Sie hier: https://keras.io/layers/wrappers/