【问题标题】:Encoder Decoder for time series forecasting用于时间序列预测的编码器解码器
【发布时间】:2020-10-03 19:19:50
【问题描述】:

我想从 55 天的训练规模预测 7 天。我尝试应用给定 herehere 的模型,但我将所有 7 天的输出值都设为 1。

我也对如何将时间序列作为编码器解码器的输入及其代码感到困惑,我根据自己的理解进行了尝试。

model.add(LSTM(150, input_shape=(None, 1)))
model.add(RepeatVector(8))
model.add(LSTM(150, return_sequences=True))
model.add(TimeDistributed(Dense(1, activation='softmax')))
model.compile(loss='mse', optimizer='adam')

for i in range(7):
    x=df[i*7:(i+1)*7]
    y=df[(i+1)*7:(i+2)*7]
    x=np.array(x)
    x=np.insert(x,0,len(x))
    x=x.reshape(1,len(x),1)
    y=np.array(y)
    y=np.insert(y,0,len(y))
    y=y.reshape(1,len(y),1)
    model.fit(x, y, epochs=1, verbose=2)

训练后,我从整个火车序列中预测 7 天。

第二个我从链接 2 尝试过

#functions define_models and predict_sequence same as link
for i in range(0,47):
    x1=df[i:i+7]
    print(len(x1))
    x2=df[i+1:i+8]
    print(len(x2))
    y=df[i+1:i+8]
    x1=np.array(x1)
    x1=np.insert(x1,0,len(x1))
    print(len(x1))
    x1=x1.reshape(len(x1),1,1)
    x2=np.array(x2)
    x2=np.insert(x2,0,0)
    print(len(x2))
    x2=x2.reshape(len(x2),1,1)
    y=np.array(y)
    y=np.insert(y,0,len(y))
    y=y.reshape(len(y),1,1)
    model.fit([x1,x2],y,epochs=1)

这也将输出设为 1。 我不确切知道 x2 应该在这里。

请纠正我的错误。

【问题讨论】:

  • 您尝试过更简单的预测方法吗?当你说你有 55 天的数据时,这是否意味着你的训练系列中有 55 个数据点?你有额外的时间序列变量吗?
  • @mloning 我尝试了其他方法,如 arima、sarima、xgboost 和 lstm,并且我有这个时间序列的功能。但是为了理解我只是在尝试没有功能。我对这些事情很陌生,所以一次迈出一步。我对编码器解码器的输入格式应该如何感到困惑。

标签: tensorflow time-series lstm recurrent-neural-network encoder-decoder


【解决方案1】:

第一个问题是,要训练一个深度网络,你应该执行以下步骤:

  1. 创建一个清晰的数据集。 “清晰的数据集”是指tf.Dataset 对象的一个​​实例。要创建tf.Dataset 的实例,您应该首先将数据集组织在具有形状(最大序列长度、批量大小、每条记录的大小)的 NumPy 数组中。在您的情况下,包含训练数据的 X 数组的大小应为 (7, 1, 1),而包含训练数据标签的 Y 数组的大小应为 (7,1)。
  2. 按照解释的格式组织数据后,您可以使用函数tf.Dataset.from_tensor_slices()创建tf.Dataset的实例
  3. 您应该使用model.fit() 函数,使用创建的tf.Dataset 实例并指定大于1 的合适时期数。该参数指定网络应在要训练的数据集上迭代的次数。此参数的值在某种程度上是任意的,但是,您应该尝试不同的值以达到最适合您的问题的值。

请注意,使用此过程您不再需要创建 for 循环。循环将在model.fit 函数内部执行。

有关如何在 TensorFlow 中实现和训练编码器-解码器模型的更多信息,请查看neural machine translation 的官方示例。

【讨论】:

  • 你能解释一下哪个代码对于编码器解码器是正确的,我的输入应该如何?
  • 你的代码没有任何意义。您应该为训练提供格式良好的特征和标签数组,然后将它们转换为tf.Dataset 对象。然后你可以使用model.fit。 LSTM 输入的真实形状是 设置`Time.在您的情况下,它将分别是 和 。在此处查看 tensorflow 的编码器-解码器代码示例:tensorflow.org/tutorials/text/nmt_with_attention
猜你喜欢
  • 2018-10-01
  • 2021-03-23
  • 2020-02-10
  • 1970-01-01
  • 2011-03-30
  • 2023-03-25
  • 2021-01-07
  • 2018-07-16
  • 1970-01-01
相关资源
最近更新 更多