我有一个多层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),因为该层为每个时间步生成一个输出矢量,在这种情况下,我应该使用最后一个输出矢量?
答案 0 :(得分:1)
由于设置了return_sequences=True
,因此LSTM层将为序列的每个时间步输出一个向量。
如果仅对最后一个序列元素感兴趣,则可以仅使用最后512个向量。
但是,如果您不需要处理以下各层,则还可以为感兴趣的层设置return_sequences=False
,它会直接输出所需的形状(1,512)