我正在尝试使用训练有素的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
的方法?
谢谢您的帮助!
答案 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
的形状。