1

我想将我的数据输入 LSTM 网络,但找不到任何类似的问题或教程。我的数据集是这样的:

person 1:
    t1 f1 f2 f3
    t2 f1 f2 f3
     ...
    tn f1 f2 f3
.
.
.

person K:
    t1 f1 f2 f3
    t2 f1 f2 f3
     ...
    tn f1 f2 f3

所以我有k一个人,对于每个人我都有一个像输入一样的矩阵。每行的第一列是增量时间戳(就像时间线,所以t1< t2),其他列是那个时间的人的特征。

在数学方面:我有一个(number of example,number of time stamp, number of feature)像 (52,20,4) 这样的矩阵,其中 52 是人数,20 是一个人的时间戳数,4 是特征数(1 列是时间戳,3 是特征)

每个人都有一个班级名称。我想使用 LSTM 神经网络将这些人分为两类。我的问题是如何将此类数据输入到 Keras 等高级库中的 LSTM 中?

编辑: 我的第一次尝试是input_shape 在 keras 中使用它,但我在二进制分类中获得了 50% 的准确率!是我的数据集中的问题还是input_shape错误?!

LSTM(5,input_shape=(20,4))
4

2 回答 2

2

您需要用 a 来表示每个人的数据feature vector并将这个向量传递给分类器(例如MLP 分类器)。我想您的问题可能是如何获取feature vector原始数据?有很多方法可以从时间序列数据中获取特征。在您的情况下,LSTM将是一种选择。

LSTM的输入需要一个 3D 向量,其形状为[batch_size x time x feature]. 正如您在问题中提到的,您可以通过以下方式将数据输入模型:

model = Sequential()
model.add(LSTM(5, input_shape=(20, 4))
model.add(Dense(2, activation='sigmoid')

1)我猜tf值变化很大,没有标准化。因此,LSTM 的预测并不令人印象深刻。

2)您的数据集相对较小。要找出问题所在,请在一小部分训练数据上过度拟合模型。如果你在训练数据上获得 100% 的准确率,那么这意味着你的 LSTM 学会了很好地表示特征向量。否则,这意味着您没有设计一个好的模型或正确地提供数据。

于 2018-12-07T19:26:50.417 回答
1

根据 LSTM 的 keras 文档,您应该提供 3D 输入形状,其中第一个维度是批量大小(通常为无)。所以试试 input_shape = (None, 20, 4)。这似乎是 Keras 的普遍现象。

于 2018-12-07T19:14:16.587 回答