在喀拉拉邦实施MLP模型以进行时间序列预测,但是模型训练得不好

时间:2018-08-16 07:52:00

标签: neural-network keras deep-learning

我正在尝试在this blog post之后提出用于时间序列预测的MLP模型。我有138个时间序列,其中lookback_window = 28(训练为50127时间序列,验证为24255时间序列)。我需要预测下一个值(timesteps = 28,n_features = 1)。我从3层网络开始,但是训练得并不好。我试图通过添加更多的层/更多的单元来使网络更深,但是并没有改善。在图片中,您可以看到以下模型的预测结果这是我的模型代码:

    inp = Input(batch_shape=(batch_size, lookback_window))
    first_layer = Dense(1000, input_dim=28, activation='relu')(inp)
    snd_layer = Dense(500)(first_layer)
    thirs_layer = Dense(250)(snd_layer)
    tmp = Dense(100)(thirs_layer)
    tmp2 = Dense(50)(tmp)
    tmp3 = Dense(25)(tmp2)
    out = Dense(1)(tmp3)
    model = Model(inp, out)
    model.compile(loss='mean_squared_error', optimizer='adam')
    history = model.fit(train_data, train_y,
                        epochs=1000,
                        batch_size=539,
                        validation_data=(validation_data, validation_y),
                        verbose=1,
                        shuffle=False)

我想念什么?我该如何改善?

enter image description here

2 个答案:

答案 0 :(得分:1)

我注意到的主要事情是您没有在图层中使用非线性。如果您希望大于1 / -1的值,我会在隐藏层使用relus,在最后一层使用线性层。如果您不希望使用它们,请使用tanh。通过增加数据,您会更难解决问题,因此主要是线性模型的拟合严重不足。

答案 1 :(得分:0)

通过以下更改,我设法获得了更好的结果:

  • 使用RMSprop代替lr=0.001的Adam,并且正如@TommasoPasini提到的,​​将它们添加到所有Dense层中(期望最后一层)。它大大改善了结果!

  • epochs = 3000而不是1000。

但是现在我认为它过于适合。这是结果图以及验证和火车损失的图:

enter image description here enter image description here