了解我的 LSTM 模型的结构

Understanding the structure of my LSTM model

我正在尝试解决以下问题:

我有来自多个设备的时间序列数据。每个设备记录的长度为 3000。捕获的每个数据点都有 4 个测量值。所以我的数据是整形的(设备记录数,3000,4)。

我正在尝试生成一个长度为 3000 的向量,其中每个数据点都是 3 个标签(y1、y2、y3)之一,因此我想要的输出 dim 是(设备记录数,3000、1)。我已经标记了训练数据。

我正在尝试为此使用 LSTM 模型,因为 'classification as I move along time series data' 似乎是 RNN 类型的问题。

我的网络设置如下:

model = Sequential()
model.add(LSTM(3, input_shape=(3000, 4), return_sequences=True))
model.add(LSTM(3, activation = 'softmax', return_sequences=True))

model.summary()

摘要如下所示:

Model: "sequential_23"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_29 (LSTM)               (None, 3000, 3)           96        
_________________________________________________________________
lstm_30 (LSTM)               (None, 3000, 3)           84        
=================================================================
Total params: 180
Trainable params: 180
Non-trainable params: 0
_________________________________________________________________

在输出 space 中,一切看起来都很好,因为我可以使用每个单元的结果来确定我的三个类别中的哪一个属于那个特定的时间步长(我认为)。

但我只有 180 个可训练参数,所以我猜我做错了什么。

谁能帮我理解为什么我的可训练参数这么少?我是否误解了如何设置此 LSTM?我是不是多虑了?

那 3 个单元是否意味着我只有 3 个 LSTM 'blocks'?而且它只能回顾 3 个观察结果?

从简单的角度来看,您可以将 LSTM 层视为具有内存的增强 Dense 层(从而实现序列的高效处理) .所以"units"的概念对于两者也是相同的:这些层的神经元特征单元的数量,或者在其他单词,这些层可以从输入中提取的独特特征的数量。

因此,当您将LSTM层的单元数指定为3时,或多或少意味着该层只能从输入时间步长中提取3个不同的特征(注意单元数与输入序列的长度无关,即整个输入序列将由 LSTM 层处理,无论单元数或输入序列长度是多少)。

通常,这可能不是最优的(不过,这实际上取决于您正在处理的特定问题和数据集的难度;即,对于您的 problem/dataset,也许 3 个单元就足够了,而您应该通过实验找出答案)。因此,通常选择更大的单元数(常见选择:32、64、128、256),并将分类任务委托给专用的 Dense 层(有时称为 "softmax layer") 在模型的顶部。

例如,考虑到您的问题描述,具有 3 个堆叠 LSTM 层和顶部 Dense 分类层的模型可能如下所示:

model = Sequential()
model.add(LSTM(64, return_sequences=True, input_shape=(3000, 4)))
model.add(LSTM(64, return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(Dense(3, activation = 'softmax'))