gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:07:00 34 4
gpt4 key购买 nike

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

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

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

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

谢谢

最佳答案

输入形状的形式为 (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())。

关于deep-learning - Keras LSTM 输入 - 预测抛物线轨迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079455/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com