用于时间序列预测的编码器解码器

问题描述 投票:0回答:1

我想从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应该在这里。

请在错误之处纠正我。

tensorflow time-series lstm recurrent-neural-network encoder-decoder
1个回答
0
投票

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

  1. 创建一个清晰的数据集。 “透明数据集”是指tf.Dataset对象的实例。要创建tf.Dataset的实例,您首先应该将NdataPy数据集组织成具有形状(批大小,记录数,每个记录的大小)的形状。在您的情况下,包含训练数据的X数组的大小应为(1、1、7),而包含训练数据的标签的Y数组的大小应为(1,7)。] >
  2. 按照说明的格式组织数据之后,您可以使用函数tf.Dataset创建tf.Dataset.from_tensor_slices()的实例
  3. 您应该在创建的model.fit()实例中使用tf.Dataset函数,并指定大于1的合适时期。参数指定网络应在要训练的数据集上进行迭代的次数。此参数的值在某种程度上是任意的,但是,您应该尝试使用不同的值以达到最适合您的问题的值。
  4. 请注意,使用此过程,您不再需要进行for循环。循环将在model.fit函数内部执行。

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

© www.soinside.com 2019 - 2024. All rights reserved.