Keras LSTM:使用过去几天的向量创建事件发生的每日向量



我刚刚开始使用Tensorflow/Keras在Python中实现LSTM以测试我的想法,但是我正在努力正确创建模型。

对于每一天,我想预测一组事件中的哪一个将会发生。这个想法是,一些事件是反复出现的/总是在一定时间后发生,而其他事件很少发生或没有任何结构。LSTM应该能够拾取这些重复发生的事件,以便预测未来几天的发生情况。

为了显示事件,我使用了一个值为0和1的列表(非发生和发生)。例如,如果我有事件["去学校"去健身房"我有像[1,0,1],[1,1,0],[1,0,1],[1,0,1],[1,1,0]等清单。这样一来,LSTM就会意识到我每天上学,每隔一天去健身房,而且很少买电脑。因此,按照向量序列,对于第二天,它应该预测[1,0,0]。

我不确定在LSTM/代码中实现这一点的最佳方法是什么,但到目前为止,我已经做了以下工作:

  1. 创建x_train,这是一个形状为(363,193)的numpy数组。它包含363个列表,相同的193个事件。
  2. 创建y_train,这也是一个形状为(363,193)的数组。这些列表比x_train早一天。例如,x_train[1] == y_train[0]的计算结果全部为True。

我不希望我的模型将第一天作为输入并预测第二天。我希望能够给它提供训练数据,比如第1、2、3天……然后让它为第366,367天创建一个0-1向量,…本身。我在网上找到了很多文章,但它们似乎都集中在预测一个单一的值,而不是一个完整的向量。

我尝试的一个实现如下:

model.add(layers.LSTM(100,input_shape=(363, 193), return_sequences=True))
model.add(layers.Dropout(0.2))
model.add(layers.Dense(1, activation='linear'))
model.compile(loss='mse',optimizer='rmsprop')
model.fit(x_train,y_train)
ValueError: Input 0 of layer "sequential_27" is incompatible with the layer: expected shape=(None, 363, 193), found shape=(None, 193)

为了得到至少一个工作模型,我试着玩周围的输入形状最多,但对我来说,这似乎是正确的,因为我的input_shape是相同的x_train.shape。我还将return_sequences设置为True,因为我相信我想利用多对多关系。

如果有人能给我一些关于如何正确创建LSTM的帮助,我将非常感激。

需要多个样本来训练网络,现在只有一个窗口大小为363。将x_train重塑为(1,363,193)可以解决输入形状问题,但根本问题仍然是一样的,只有一个训练样本。我建议试试https://www.tensorflow.org/api_docs/python/tf/data/Dataset#window。

最新更新