多元 LSTM 模型的输出是什么?

数据挖掘 深度学习 lstm rnn
2022-03-04 18:29:59

我目前正在尝试通过使用多元输入来构建 LSTM 模型,但我不明白我预测的确切输出是什么。

我目前正在使用数据中的 5 个特征作为输入数据:

X_data = data[['Time', 'Avg CPU Load', 'F1', 'F2', 'F3']]

我的主要目标是通过使用其他功能作为输入数据来预测“平均 CPU 负载”,但我不确定我是否这样做。

在这些功能中,我将“时间”作为数据框中的索引。然后我在下面的代码中使用了 60 个时间步。

new_X_train=[]
new_Y_train=[]
for i in range(len(X_data)-timesteps-1):
    t=[]
    for j in range(0,timesteps):
        
        t.append(X_data[[(i+j)], :])
    new_X_train.append(t)
    new_Y_train.append(X_data[i+ timesteps,1])
 

变量“new_X_train”和“new_Y_train”具有必须插入模型的输入数据。然后我定义我的模型。

sq = Sequential()
sq.add(LSTM(units = 100, return_sequences = True,
           input_shape = (None, 4)))
sq.add(Dropout(0.2))

sq.add(LSTM(units = 100,return_sequences = True))
sq.add(Dropout(0.2))

sq.add(LSTM(units = 100,return_sequences = True))
sq.add(Dropout(0.2))

sq.add(LSTM(units = 100))
sq.add(Dropout(0.2))

sq.add(Dense(units=1)) # only one output

sq.compile(optimizer = 'adam', loss = 'mean_squared_error')

sq.fit(new_X_train, new_Y_train, epochs = 5, batch_size = 20)

训练模型后,我加载测试数据并实施 60 个时间步长。IE:我对训练数据做同样的事情,然后我使用X_test数据来预测值。

predicted = sq.predict(X_test)

现在我不确定上面的代码预测的是什么输出,比如它试图预测什么特征?

以及如何让我的模型预测“平均 CPU 负载”功能?

1个回答

如果您想预测“平均 CPU 负载”,您y_train应该只是“平均 CPU 负载”列,而您x_train应该是其余列(如果所有时间戳等距,您可能会跳过时间列)。

然后,网络将学习将其余列映射到“Avg CPU Load”的函数,并且它应该进行相同的预测。

在测试阶段,您还必须遵循相同的结构x_testy_test即基本事实)。

在这种情况下,对于 RNN,您将每个训练样本生成为超过 60 个时间戳的所有列是正确的。您可以通过根据基本事实进行绘图来检查预测是否确实是您想要的。虽然,我认为您应该预测所有列(new_y_train是所有列而不是仅平均 CPU 负载),即使输出维度与输入维度相同。

让网络预测整个事情并选择您感兴趣的列供您考虑。这可能是更自然的方法。