Keras LSTM 输入 - 预测抛物线轨迹

Posted

技术标签:

【中文标题】Keras LSTM 输入 - 预测抛物线轨迹【英文标题】:Keras LSTM input - Predicting a parabolic trajectory 【发布时间】:2018-04-15 05:20:28 【问题描述】:

我想预测一个球落下的轨迹。这条轨迹是抛物线的。我知道 LSTM 可能太多了(即一个更简单的方法就足够了)。 我认为我们可以用 2 个 LSTM 层和最后一个 Dense 层来做到这一点。

我想要的最终结果是给模型 3 个高度 h0、h1、h2 并让它预测 h3。然后,我想给它h1,h2,和它之前输出的h3来预测h4,以此类推,直到我可以预测出整个轨迹。

首先,第一个 LSTM 层的输入形状是什么? 会是 input_shape = (3,1) 吗? 其次,LSTM 是否能够预测抛物线路径?

我得到的几乎是一条平线,而不是抛物线,我想排除我误解了如何输入和塑造输入的可能性。

谢谢

【问题讨论】:

【参考方案1】:

输入形状的格式为(samples, timeSteps, features)

你唯一的特征是“身高”,所以features = 1。 由于您要输入不同长度的序列,您可以使用timeSteps = None

所以,您的 input_shape 可能是 (None, 1)。 由于我们将在下面使用stateful=True 层,我们可以使用batch_input_shape=(1,None,1)。选择您想要的“样本”数量。

您的模型确实可以预测轨迹,但可能需要不止一层。 (关于多少层和多少单元的确切答案取决于了解 LSTM 内部的匹配是如何工作的)。

培训:

现在,首先你需要训练你的网络(只有这样它才能开始预测好的事情)。

对于训练,假设您有一系列[h1,h2,h3,h4,h5,h6...],正确序列中的真值。 (我建议你实际上有很多序列(样本),所以你的模型学得更好)。

对于这个序列,你想要一个预测下一步的输出,那么你的目标是[h2,h3,h4,h5,h6,h7...]

所以,假设您有一个形状为(manySequences, steps, 1)data 数组,您可以:

x_train = data[:,:-1,:]    
y_train = data[:,1:,:]

现在,您的图层应该使用return_sequences=True。 (每个输入步骤都会产生一个输出步骤)。然后你用这些数据训练模型。

这一点,无论您使用的是stateful=True 还是stateful=False,都不是很相关。 (但如果是真的,你总是需要model.reset_state() 在每个纪元和序列之前)

预测:

对于预测,您可以在模型中使用stateful=True。这意味着当您输入h1 时,它将产生h2。当您输入h2 时,它会记住“当前速度”(模型的state)来预测正确的h3

(在训练阶段,拥有这个并不重要,因为你是一次输入整个序列。所以在长序列的步骤之间可以理解速度)。

您可以将方法reset_states() 设置为set_current_speed_to(0)。只要您要输入的步骤是序列中的第一步,您就会使用它。

然后你可以做这样的循环:

model.reset_states() #make speed = 0
nextH = someValueWithShape((1,1,1))  

predictions = [nextH]

for i in range(steps):
    nextH = model.predict(nextH)    
    predictions.append(nextH)

有an example here,但使用了两个功能。不同之处在于我使用了两种模型,一种用于训练,一种用于预测,但您只能使用return_sequences=Truestateful=True 的一种(不要忘记在训练的每个时期开始时使用reset_states()) .

【讨论】:

以上是关于Keras LSTM 输入 - 预测抛物线轨迹的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript与元素间的抛物线轨迹运动

双曲线,抛物线上的三角形面积一般都咋求,?

如何用几何画板平移抛物线

js加入购物车抛物线动画

Keras 中的 LSTM 序列预测只输出输入的最后一步

复杂算法双向树 - 分类抛物线 3D 运动 [关闭]