我刚刚开始用Tensorflow / Keras在Python中实现LSTM,以测试我的想法,但是我很难正确地创建一个模型。
对于每一天,我想预测哪一组事件将发生。其思想是,有些事件是反复发生的/总是在一段时间过去之后发生的,而另一些事件则很少发生或没有任何结构。LSTM应该能够捕捉到这些反复发生的事件,以便预测未来几天的发生情况。
为了显示事件,我使用一个值为0和1(无发生和发生)的列表。例如,如果我有活动“去学校”,“去健身房”,“买一台电脑”,我有一个清单,比如1,0,1,1,0,1,0,1,1,1,0等等。这个想法是,LSTM会意识到我每天都去上学,每隔一天去健身房,买一台电脑是非常罕见的。因此,按照向量的顺序,第二天它应该可以预测1,0,0。
我不知道在LSTM /代码中实现这一点的最佳方法是什么,但到目前为止,我已经完成了以下工作:
x_train[1] == y_train[0]
计算为所有True.我不希望我的模型作为输入第一天和预测第二天。我想给它训练数据,如第1天,第2天,第3天,...,365,然后让它创建一个0-1矢量为第366,367,.独自一人。我在网上发现了很多文章,但它们似乎都专注于预测单个值,而不是一个完整的向量。
我尝试过的一个实现如下:
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方面给我一些帮助,我将非常感激。
发布于 2022-05-03 07:32:12
需要多个样本来训练网络,现在只有一个窗口大小为363。将x_train重塑为(1,363,193)将修复输入形状问题,但根本问题仍然相同,只有一个训练样本。我建议给https://www.tensorflow.org/api_docs/python/tf/data/Dataset#window一个尝试。
https://stackoverflow.com/questions/72101086
复制