2017-03-31 6 views
0

シーケンスエンコーダデコーダモデルへのシーケンスを作成しようとしており、カテゴリクロスエントロピーを使用するために最後のレイヤーをソフトマックスする必要があります。LSTMがkerasでシーケンスを返すときsoftmaxを実行するには?

私は最後のLSTMレイヤーのアクティブ化を 'softmax'に設定しようとしましたが、そのトリックはしていないようです。別の高密度層を追加し、活性化をsoftmaxに設定してもどちらでも役に立ちません。最後のLSTMがシーケンスを出力するときにsoftmaxを実行する正しい方法は何ですか?

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') 

答えて

1

はそれを考え出した:

をKeras 2の時点で、あなたは、単に追加することができます。

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

をTimeDistributedは、各一時的な時間ステップに緻密層を適用することができます。ドキュメントはこちらをご覧ください:https://keras.io/layers/wrappers/

関連する問題