当LSTM在keras中返回序列时如何做softmax?

时间:2017-03-31 16:15:44

标签: machine-learning 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 个答案:

答案 0 :(得分:2)

想出来:

从Keras 2开始,您只需添加:

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

TimeDistributed允许您在每个时间步长上应用Dense图层。可以在此处找到文档:https://keras.io/layers/wrappers/