LSTM/GRU 自动编码器收敛

LSTM/GRU autoencoder convergency

目标

尝试在多变量时间序列数据集上运行 LSTM 自动编码器:
X_train (200, 23, 178) - X_val (100, 23, 178) - X_test (100, 23, 178)

现状

普通自动编码器比 LSTM AE 的简单架构获得更好的结果。

我对如何使用 Repeat Vector 包装层有一些疑问,据我所知,它应该简单地重复等于序列长度的次数LSTM/GRU 单元的最后状态,以提供解码器层的输入形状。

模型架构没有出现任何错误,但结果仍然比简单的 AE 差一个数量级,而我希望它们至少相同,因为我使用的架构应该更好适合时间问题。

首先,这些结果是否具有可比性?

尽管如此,LSTM-AE 的重建误差看起来一点也不好。

我的AE模型:

Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 178)               31862     
_________________________________________________________________
batch_normalization (BatchNo (None, 178)               712       
_________________________________________________________________
dense_1 (Dense)              (None, 59)                10561     
_________________________________________________________________
dense_2 (Dense)              (None, 178)               10680     
=================================================================

我的LSTM/GRUAE:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 23, 178)           0         
_________________________________________________________________
gru (GRU)                    (None, 59)                42126     
_________________________________________________________________
repeat_vector (RepeatVector) (None, 23, 59)            0         
_________________________________________________________________
gru_1 (GRU)                  (None, 23, 178)           127092    
_________________________________________________________________
time_distributed (TimeDistri (None, 23, 178)           31862     
=================================================================

您上面的 2 个模型似乎没有可比性,就有意义的方式而言。第一个模型试图压缩 178 个值的向量。这些向量很可能包含一些冗余信息,因此可以合理地假设您将能够压缩它们。

第二个模型试图通过单个 GRU 层压缩 23 x 178 向量的序列。这是一项具有大量参数的任务。重复向量简单地获取第一个 GRU 层(编码器)的输出,并将其作为第二个 GRU 层(解码器)的输入。但是随后您采用解码器的单个值。我建议您在第二个 GRU(解码器)中使用 return_sequences=True 而不是 TimeDistributed 层。否则你是说你期望 23x178 序列由所有具有相同值的元素组成;这必须导致非常高的错误/没有解决方案。

我建议您退后一步。您的目标是找到序列之间的相似性吗?或者能够做出预测?自动编码器方法更适用于相似性任务。为了做出预测,我建议您更多地采用一种方法,将 Dense(1) 层应用于序列步骤的输出。

你的数据集开放了吗?可用的 ?如果可能的话,我很想试一试。