LSTM/GRU自编码器收敛性

目标

尝试在一个多变量时间序列数据集上运行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的重建误差看起来非常糟糕。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
  • 损失函数: mse
  • 密集层的激活函数: 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
  • 损失函数: mse
  • GRU层的激活函数: relu

回答:

你上面提到的两个模型似乎在有意义的方式上无法比较。第一个模型试图压缩你的178个值的向量。这些向量可能包含一些冗余信息,因此可以合理地假设你能够压缩它们。

第二个模型试图通过单个GRU层压缩23 x 178的向量序列。这是一个参数数量显著增加的任务。重复向量只是将第一个GRU层(编码器)的输出作为第二个GRU层(解码器)的输入。但随后你只取了解码器的一个值。我建议你不用TimeDistributed层,而是在第二个GRU(解码器)中使用return_sequences=True。否则,你等于在说你期望23×178序列的所有元素值都相同;这必然会导致非常高的误差/无解的情况。

我建议你退一步思考。你的目标是寻找序列之间的相似性吗?还是要进行预测?对于相似性任务,自编码器方法更可取。为了进行预测,我建议你更倾向于在序列步骤的输出上应用Dense(1)层的做法。

你的数据集是公开的吗?可用的吗?如果可能的话,我对尝试使用它感到好奇。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注