我正在尝试对Keras中的TimeseriesGenerator的输出进行建模,该输出将用作LSTM网络的输入,但一直存在问题。数据集具有以下结构:
其中一组功能以绿色(F1至F6)显示,目标变量(T)以红色显示。 我将3170个观测值组成的总数据集分为三组:
由于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]))
因此,重整后的数据集的大小如下:
其中三个维度是(样本,时间步长,特征)。但是真正的问题是现在将数据集传递给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)的输入?
答案 0 :(得分:0)
错误是...不要重塑您的训练、验证和测试数据...生成器会自动将其设为 (10, 1,6)..因为当您指定批次大小为 10 时,它将需要 10批次...具有 1 个数据长度和 6 个特征...试试吧。它会起作用..
只需在 (m, n) 生成器中提供您的训练、验证、测试数据即可自行重塑