LSTM / GRU自动编码器收敛

时间:2019-02-28 11:57:15

标签: python machine-learning lstm recurrent-neural-network autoencoder

目标

我遇到一个奇怪的情况,试图在我的时间序列数据集上创建高效的自动编码器:
X_train (200, 23, 178) X_val (100, 23, 178) X_test (100, 23, 178)

现状

在时间序列数据集上,使用简单的自动编码器比使用简单的LSTM AE可获得更好的结果。
我对重复向量包装器层的使用有些担心,据我所知,该层应该重复许多次,例如序列长度是LSTM / GRU单元的最后状态,为了适合解码器层的输入形状。

该模型不会出现任何错误,但结果仍然比简单的AE更差一个数量级,而我希望至少与我使用的体系结构相同,该体系结构应适合域问题。不过,重建看起来并不好,只是噪音。enter image description here

我的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     
=================================================================
  • 优化程序:sgd
  • 损失:毫秒
  • 致密层的激活功能:relu

我的LSTM / GRU AE:

_________________________________________________________________
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     
=================================================================
  • 优化程序:sgd
  • 损失:毫秒
  • gru层的激活功能:relu

在使用这些循环图层时,我是否在某些假设下犯了一些大错误?或者您对如何调试它有一些建议?

1 个答案:

答案 0 :(得分:1)

您上面拥有的2个模型在某种意义上似乎并不具有可比性。第一个模型正在尝试压缩178个值的向量。这些向量很可能包含一些冗余信息,因此有理由假设您将能够对其进行压缩。

第二个模型正在尝试通过单个GRU层压缩23 x 178个向量的序列。这是一个具有大量参数的任务。重复向量仅获取第一GRU层(编码器)的输出,并将其输入到第二GRU层(解码器)的输入。但是随后您需要使用解码器的单个值。建议您在第二个GRU(解码器)中使用return_sequences=True而不是TimeDistributed层。否则,您是在说23x178序列是由均具有相同值的元素构成的。必须导致很高的错误/无法解决。

我建议您退后一步。您的目标是寻找序列之间的相似性吗?还是能够做出预测?对于相似性任务,最好使用自动编码器方法。为了做出预测,我建议您更进一步采用将Dense(1)层应用于序列步骤的输出的方法。

您的数据集是否打开?有空吗?如果可以的话,我很想尝试一下。