2017-03-31 33 views
0

我正在嘗試對順序編碼器解碼器模型進行排序,並且需要softmax使用最後一層來使用分類交叉熵。如何在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/