如何在 keras LSTM 自动编码器中获得学习表示
How to get the learned respresentation in keras 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) 对吗,因为该层为每个时间步生成一个输出向量,在这种情况下我应该使用最后一个输出向量?
由于您设置了 return_sequences=True
,因此 LSTM 层将为序列的每个时间步长输出一个向量。
如果您只对最后一个序列元素感兴趣,您可以只使用最后一个 512 向量。
但是,如果您不需要后续图层的处理,您也可以只为您感兴趣的图层设置 return_sequences=False
,它会直接输出您想要的形状 (1,512)
我有一个多层 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) 对吗,因为该层为每个时间步生成一个输出向量,在这种情况下我应该使用最后一个输出向量?
由于您设置了 return_sequences=True
,因此 LSTM 层将为序列的每个时间步长输出一个向量。
如果您只对最后一个序列元素感兴趣,您可以只使用最后一个 512 向量。
但是,如果您不需要后续图层的处理,您也可以只为您感兴趣的图层设置 return_sequences=False
,它会直接输出您想要的形状 (1,512)