如何使用经过训练的Keras GRU模型预测新的数据系列?

时间:2019-06-21 12:43:37

标签: python tensorflow keras

我正在尝试使用训练有素的Keras序列模型(GRU)来预测一些新的数据样本,但是在创建时间序列生成器时会遇到一些问题。

在训练过程中,使用model.predict_generator()预测了验证集,该输入使用了keras.preprocessing.sequence.TimeseriesGenerator()link)创建的Python生成器。我想用一个新的测试集重复该过程,只是发现TimeseriesGenerator()需要数据和目标作为输入。但是在这种情况下,我希望通过预测函数获得目标(即y_test)。

我的训练代码的简化版本如下:

training_generator = TimeseriesGenerator(X_train, y_train, length=timesteps * sampling_rate, sampling_rate=sampling_rate, batch_size=batch_size, shuffle=shuffle_data)
test_generator = TimeseriesGenerator(X_test, y_test, length=timesteps * sampling_rate, sampling_rate=sampling_rate, batch_size=batch_size, shuffle=shuffle_data)

model.fit_generator(generator=training_generator, epochs=epochs, use_multiprocessing=False, verbose=2)
y_test_pred = model.predict_generator(generator=test_generator)

我还考虑过自己编写一个自定义生成器,但是要验证该生成器与正式时间序列生成器之间的等效性真的很难。

有没有不用TimeseriesGenerator()就可以使用targets的方法?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

一个简单的解决方法是生成虚拟目标,因为predict_generator将忽略它们:

X_test =  your new test data
y_dummy = np.zeros((X_test.shape[0], ))
test_generator = TimeseriesGenerator(X_test, y_dummy, length=timesteps * sampling_rate, sampling_rate=sampling_rate, batch_size=batch_size, shuffle=shuffle_data)
y_test_pred = model.predict_generator(generator=test_generator)

如果标签是多维的,则应调整y_dummy的形状。