我有一系列序列。我想将它们编码为长度为encoded_dim
的向量。为此,我在Keras中使用堆叠的LSTM制作了自动编码器:
inputs = Input(shape=(None, input_dim))
encoded = LSTM(encoded_dim)(LSTM(latent_dim, return_sequences=True)(inputs))
decoded = RepeatVector(timesteps)(encoded)
decoded = Dense(8)(Dense(100)(LSTM(input_dim, return_sequences=True)(decoded)))
sequence_autoencoder = Model(inputs, decoded)
sequence_autoencoder.compile(optimizers.Adam(lr=0.01), loss='mean_squared_error')
sequence_autoencoder.fit(input, input, epochs=3000, batch_size=16, shuffle=False, callbacks=[...], validation_split=.2)
当我将注意力集中在长度为timesteps
的序列上时,这很好用。但是,总的来说,我的序列长度不一样,因此RepeatVector(timesteps)
不能按原样工作。 (这也会使批处理变得混乱,但是我对batch_size=1
进行了不错的培训,因此对于我的特定用例,我不太担心。)
在通用seq2seq建模的情况下,进行了富有成果的对话here,涉及可变长度的输入序列和批处理。不幸的是,那里没有检索固定大小编码的问题。
非常感谢任何建议/代码段。