强制LSTM Keras使用时间序列依赖性

时间:2017-10-18 20:39:18

标签: python time-series keras lstm

我有两个时间序列A和B:

A: 1,2,3,1,2,3,3,3,1,2,3,3,3  
B: 0,0,1,0,0,1,1,1,0,0,1,1,1

这个简单的训练集说信号B与A相关。事实上,每次A等于3,同时在B中,B值为1.

我介绍上面的例子只是为了解释我的问题。当我使用Keras使用LSTM来预测数据时,我希望模型能够从系列中理解这种依赖关系。

现在我使用这个配置:

model.add(keras.layers.LSTM(hidden_nodes, activation='sigmoid', input_dim=num_features, input_length=window, consume_less="mem"))
model.add(keras.layers.Dense(num_features, activation='sigmoid'))

optimizer = keras.optimizers.SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True)

但是我看到LSTM预测的价值在时间序列之间没有明显的使用依赖性。如果我使用5的窗口进行预测,以便预测下一个点:

A: [1,2,3,1,2]
B: [0,0,1,0,0]

我希望LSTM给出A值3和B值1,因为下面的训练集说明了这一点。

问题是我的网似乎使用信号而没有给出正确的权重信号依赖性。

1 个答案:

答案 0 :(得分:1)

你应该只有一个系列有两个功能。

如果A和B是列表(不是numpy数组):

fullSeq = np.array(A + B)
#this shape is (lenA + lenB,)

fullSeq = fullSeq.reshape((2,len(A)))
fullSeq = fullSeq.swapaxes(0,1).reshape((1,len(A),2))

#make sure that the resulting array is something like [[[1,0],[2,0],[3,1],...]]

现在您有一个num_features=2的序列。 A和B现在完全依赖。