如何在keras LSTM Autoencoder中获得学习的表示形式

时间:2019-03-14 17:43:20

标签: python keras deep-learning lstm autoencoder

我有一个多层LSTM自动编码器,其输入是具有4个属性的20步时间序列。

    model = Sequential()
    model.add(CuDNNLSTM(128, input_shape=(20, 4), return_sequences=True))  # encode 1
    model.add(CuDNNLSTM(256, return_sequences=True))  # encode 2
    model.add(CuDNNLSTM(512, return_sequences=True))  # encode 3 -- our final vector
    model.add(CuDNNLSTM(256, return_sequences=True))  # decode 1
    model.add(CuDNNLSTM(128, return_sequences=True))  # decode 2
    model.add(TimeDistributed(Dense(4)))
    model.compile(optimizer='adam', loss='mse')

当我将输出层设置为对第3层进行编码时,输出的形状为(1,20,512)。

如何从该层获取形状为(1,512)的向量作为学习的输入时间序列表示?

我的意思是形状为(1,20,512),因为该层为每个时间步生成一个输出矢量,在这种情况下,我应该使用最后一个输出矢量?

1 个答案:

答案 0 :(得分:1)

由于设置了return_sequences=True,因此LSTM层将为序列的每个时间步输出一个向量。

如果仅对最后一个序列元素感兴趣,则可以仅使用最后512个向量。 但是,如果您不需要处理以下各层,则还可以为感兴趣的层设置return_sequences=False,它会直接输出所需的形状(1,512)