我想将我的数据输入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?
编辑:
我的第一个尝试是在keras中将其用作input_shape
,但在二进制分类中我获得了50%的精度!是我的数据集中的问题还是input_shape
是错误的?!
LSTM(5,input_shape=(20,4))
答案 0 :(得分:0)
根据LSTM的keras文档,您应该提供3D输入形状,其中第一维是批处理大小(通常为None)。因此,请尝试input_shape =(None,20,4)。对于Keras来说,这似乎很常见。
答案 1 :(得分:0)
您需要用feature vector
表示每个人的数据,并将此向量传递到分类器中(例如MLP classifier)。问题是如何获得feature vector
?有很多方法可以得到这样的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)我猜t
和f
的值相差很大,而不是normalized。结果,对LSTM的预测并不令人印象深刻。
2)您的数据集相对较小。要找出是 LSTM 问题还是数据集问题使模型过度适合训练数据。如果您在训练数据上获得100%的准确性,则意味着您的LSTM学会了很好地表示特征向量。否则,这意味着您设计的模型不正确或数据输入不正确。