在Keras Tensorflow中将TimeseriesGenerator与多元数据集结合使用

时间:2019-12-12 09:11:24

标签: python tensorflow keras lstm python-3.7

我正在尝试对Keras中的TimeseriesGenerator的输出进行建模,该输出将用作LSTM网络的输入,但一直存在问题。数据集具有以下结构:

enter image description here

其中一组功能以绿色(F1至F6)显示,目标变量(T)以红色显示。 我将3170个观测值组成的总数据集分为三组:

enter image description here

由于Keras中的LSTM需要三个尺寸的输入大小,因此我使用以下命令对数据集进行了重塑:

        train= train.reshape((train_df.shape[0], 1, train_df.shape[1]))
        validation= validation.reshape((validation.shape[0], 1, validation.shape[1]))
        test= test.reshape((test.shape[0], 1, test.shape[1]))

因此,重整后的数据集的大小如下:

enter image description here

其中三个维度是(样本,时间步长,特征)。但是真正的问题是现在将数据集传递给keras中的时间序列生成器。使用的生成器代码如下:

        generator = TimeseriesGenerator(train, train_target, length=1, batch_size=10)

TimeseriesGenerator将数据集传递给fit_generator,如下所示:

        model.fit_generator(generator, validation_data=(validation, validation_target),
                                       epochs=100, verbose=0,
                                       shuffle=False, workers=1, use_multiprocessing=True)

我在Keras中的LSTM网络配置如下:

                model = Sequential()
                model.add(LSTM(200, input_shape=(10, 6), return_sequences=True))
                model.add(LSTM(200, input_shape=(10, 6), return_sequences=False))
                model.add(Dense(1, kernel_initializer='uniform', activation='linear')) 

第一LSTM层的input_shape为(10,6),这意味着10个具有6个特征的样本/观测值。之所以选择input_shape为(10,6),是因为应该将TimeseriesGenerator生成一个批处理大小为10个样本的样本,每个样本具有6个特征。

但是,这将导致如下错误:

ValueError: Error when checking input: expected lstm_input to have 3 dimensions, but got array with shape (10, 1, 1, 6)

TimeseriesGenerator生成设置为(10,1,1,6)的火车的输入大小。生成的火车数据集具有四个维度,但是我希望TimeseriesGenerator生成一个批处理大小为10个样本,每个样本具有6个特征,即一个火车数据集的输入大小为(10,1,6)

如何让TimeseriesGenerator生成输入大小为(10,1,6)的输入?

1 个答案:

答案 0 :(得分:0)

错误是...不要重塑您的训练、验证和测试数据...生成器会自动将其设为 (10, 1,6)..因为当您指定批次大小为 10 时,它将需要 10批次...具有 1 个数据长度和 6 个特征...试试吧。它会起作用..

只需在 (m, n) 生成器中提供您的训练、验证、测试数据即可自行重塑