用于轨迹预测的编码器-解码器

Encoder-Decoder for Trajectory Prediction

我需要使用编码器-解码器结构来预测二维轨迹。由于几乎所有可用的教程都与 NLP 相关——使用稀疏向量——,我不确定如何使解决方案适应连续数据。

除了我对seqence-to-sequence模型的无知外,embedding单词的处理更让我困惑。我有一个包含 3,000,000 个样本的数据集,每个样本具有 x-y 坐标 (-1, 1) 和 125 个观测值,这意味着每个样本的形状是 (125, 2)。我想我可以把它想象成 125 个已经嵌入二维单词的单词,但是这个 Keras Tutorial 中的编码器和解码器期望 3D 数组为 (num_pairs, max_english_sentence_length, num_english_characters).

我怀疑我是否需要用这个模型单独训练每个样本 (125, 2),就像 Google 的搜索栏只写一个词一样。

据我了解,编码器是 many-to-one 类型模型,解码器是 one-to-many 类型模型。我需要获得一个内存状态 c 和一个隐藏状态 h 作为向量(?)。然后我应该使用这些向量作为解码器的输入,并提取我确定的 (x,y) 形状的预测作为编码器输出。

如果有人能给出一个关于我的数据集形状的编码器-解码器 LSTM 架构的示例,特别是在编码器-解码器输入和输出所需的维度方面,特别是在 Keras 模型上,如果可能。

我假设您想用之前的 125 个时间步长预测 50 个时间步长(作为示例)。我给你最基本的时间序列编码器-解码器结构,但它可以改进(例如 Luong Attention)。

from tensorflow.keras import layers,models

input_timesteps=125
input_features=2
output_timesteps=50
output_features=2
units=100

#Input
encoder_inputs = layers.Input(shape=(input_timesteps,input_features))

#Encoder
encoder = layers.LSTM(units, return_state=True, return_sequences=False)
encoder_outputs, state_h, state_c = encoder(encoder_inputs) # because return_sequences=False => encoder_outputs=state_h

#Decoder
decoder = layers.RepeatVector(output_timesteps)(state_h)
decoder_lstm = layers.LSTM(units, return_sequences=True, return_state=False)
decoder = decoder_lstm(decoder, initial_state=[state_h, state_c])


#Output
out = layers.TimeDistributed(Dense(output_features))(decoder)

model = models.Model(encoder_inputs, out)

所以这里的核心思想是:

  1. 将时间序列编码为两种状态:state_hstate_c。检查 this 以了解 LSTM 单元的工作。
  2. 重复state_h您要预测的时间步数
  3. 使用 LSTM 解码,初始状态由编码器计算
  4. 使用密集层来塑造每个时间步所需特征的数量

我建议您测试我们的结构并使用 model.summary()tf.keras.utils.plot_model(mode,show_shapes=True) 将它们可视化。它为您提供了很好的表示形式,例如摘要:

Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_5 (InputLayer)            [(None, 125, 2)]     0                                            
__________________________________________________________________________________________________
lstm_8 (LSTM)                   [(None, 100), (None, 41200       input_5[0][0]                    
__________________________________________________________________________________________________
repeat_vector_4 (RepeatVector)  (None, 50, 100)      0           lstm_8[0][1]                     
__________________________________________________________________________________________________
lstm_9 (LSTM)                   (None, 50, 100)      80400       repeat_vector_4[0][0]            
                                                                 lstm_8[0][1]                     
                                                                 lstm_8[0][2]                     
__________________________________________________________________________________________________
time_distributed_4 (TimeDistrib (None, 50, 2)        202         lstm_9[0][0]                     
==================================================================================================
Total params: 121,802
Trainable params: 121,802
Non-trainable params: 0
__________________________________________________________________________________________________

并绘制模型: