我是否缺少有关LSTM的信息?

时间:2018-09-27 17:39:19

标签: python keras deep-learning time-series lstm

我通过LSTM网络传递的数据不平衡。

这是我的代码的一部分:

weights = class_weight.compute_class_weight('balanced',np.unique(trainY),trainY)

print (weights)
model = Sequential()
model.add(LSTM(64, input_shape=(look_back, trainX.shape[2]), recurrent_dropout=0.3, return_sequences=True)) #
model.add(Dropout(0.3))
model.add(LSTM(32,  recurrent_dropout=0.3))
model.add(Dense(1, activation='sigmoid'))
print (model.summary())
model.compile(loss='binary_crossentropy', optimizer='adam',metrics=['accuracy'])
model.fit(trainX, trainY, validation_data=(validX, validY), epochs=100, batch_size=16, class_weight=weights, verbose=1 , callbacks=callbacks_list, shuffle=True)  

[0.6147541 2.67857143]的重量不平衡。

但是,当我打印混乱矩阵(每组)时,我只能得到0的预测。

如何整理我的数据。实际上,LSTM输入中的每个2-D序列的大小为(time_step, features),对吗?在这里,我使用1的time_step(并且features = 22,没关系)。因此,这就像我一次一次提取时间序列的每个样本一样。

当我将time_step增加到5左右时,它的工作效果稍好一些,但我仍然得到了很高的“假0”值(0是最大的表示类),尽管几层MLP可以很好地工作参数class_weight可以很好地处理相同的数据。我对LSTM做错了吗?

以下是构建序列的方式:look_back是瞬间滑动窗口的大小,该滑动窗口的中心是我当前采取的当前时间步,并且窗口重叠:

def create_dataset(feat,targ, look_back=2):
    semi_window=math.floor(look_back/2)
    dataX, dataY = [], []

    for i in range(semi_window,len(targ)-semi_window):
        a = feat[i-semi_window:(i+semi_window+1), :]
        dataX.append(a)
        dataY.append(targ[i])
    return np.array(dataX), np.array(dataY)

我真的在等待帮助,因为它似乎可以在简单的MLP下提供性能,而它是用来学习时间序列的时间依赖性的。

0 个答案:

没有答案