如何使用经过RNN训练的多对多方法使用keras生成创造性的一对多序列?

时间:2019-05-28 15:30:41

标签: python tensorflow keras lstm recurrent-neural-network

我正在使用tf.keras API根据航班数据训练RNN。每个点的格式为[x0,y0,vx0,vy0,ax0,ay0,tx,ty](位置,速度,加速度,单位圆上的24小时时间),每个飞行都是这些点的序列。 RNN中将各个航班作为输入。 RNN输出[t + 1时为ax,t + 1时为ay](下一个时间增量的加速度)。然而,在生成预测的飞行中,仅输入数据序列是不够的。我需要创造性地从一个或多个初始输入点生成一个航班,并使用输出生成序列中的下一个输入点。

我的第一个尝试是集成的model.predict(X)方法不会保留时间步预测之间的隐藏状态,因此每个预测仅基于输入点,而不是整个输入点序列。 https://stackoverflow.com/a/45509853/7066397概述了一种控制隐藏状态变化的方法,但是我的实现是在Keras中进行的,只有在训练完成后才需要生成预测。我需要的方法与rnnTimeStep(INDarray)的DeepLearning4Java实现紧密相关,但是我还是在keras中实现了该模型。

此代码块根据数据集train_test_x中的完整飞行次数生成并保存预测。但是,这不是我的预期行为,并且无法按照我的需要从单个输入点正确生成广告素材。

for i in [1,10,20,30,40,50]:
    f = open('predictions/CuDNN_LSTM/training_outputs_epoch{:03d}_2019_CuDNN.npy'.format(i),'wb+')
    model = keras.models.load_model('output/pymodels/model_epoch{:03d}_CuDNN.h5'.format(i))
    prediction = model.predict(train_test_x,verbose=1)
    np.save(f,prediction)

我的预期结果是一次飞行一次生成一个航班,每个下一个时间步取决于每个先前的时间步。

很抱歉,我为您提供帮助。

0 个答案:

没有答案