Keras最大化了交叉序列相关性

时间:2017-11-09 19:35:10

标签: tensorflow keras lstm sequential

我正在使用带有Tensorflow后端的Keras,一次一步地对多个序列进行序列预测;也就是说,我有n个序列,每个序列都有m个时间步长,我用一个model.predict()命令将它们全部加载到Keras中,模型返回一个'n'元素数组,每个元素对应于每个n的预测下一步序列。

因此,我的目标是最大限度地提高Keras检测序列之间互相关的能力。例如,假设序列a与序列b强烈相关,具有一些时间延迟和比例因子差异,那么理论上Keras应该能够使用序列b来更好地预测序列a的下一步骤。我现在如何拥有它我正在测试4个序列,每个30个元素长,然后将它们发送到我的模型,输入数据具有形状(4,30,1),输出数据具有形状(4,1) :

model = Sequential()

model.add(LSTM(
    input_shape=(30, 1),
    output_dim=100,
    return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(
    200,
    return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(
    output_dim=1,
    return_sequences=False))
model.add(Activation("linear"))

model.compile(loss="mse", optimizer="rmsprop")
return model

我想知道的是,如果Keras已经对序列进行了互相关,或者我的模型当前将它们视为独立的并且只是同时预测它们(即它与预测下一步的相同)序列a,然后是b,然后是c,等等。如果我将它们视为每个时间步长具有n个特征的1个序列(即,形状(1,30,4)的输入数据和形状的输出数据(1,4)),Keras能够更好地交叉关联序列)?如果是这样,我仍然能够输出一个n元素数组,每个元素仍然与一个输入数组相关(即它们是否保持区分能力)?

谢谢!

1 个答案:

答案 0 :(得分:0)

我继续前进,只测试了两种方式,并发现 - 回答我自己的问题:

  • 是的,Keras最初是单独处理序列,而不是完全相互关联。
  • 是的,因此通过将数据作为具有多个特征的单个序列输入,它能够更好地进行交叉相关(在这种情况下,这是唯一提供任何互相关的方案)。
  • 是的,Keras能够保持功能之间的区别。

为了确定这一点,我使用每种输入格式进行了多次试验,并且最初计算的是适合预测的chi ^ 2与实际测试数据,以查看输入序列AD是否更好地改善了A的预测而不仅仅是输入A和B然而,当我这样做时,我很快注意到,在我的原始格式中,输入BD对A的预测没有影响(使用4个输入的预训练模型,用D切换序列C - 因为保持了区分能力并且需要应该已经显着改变了输出 - 导致预测完全没有变化)。当使用4个特征的新模型进行相同的输入切换时,A的预测明显依赖于其他输入B-D。在多输入模型上使用多个特征模型也可以得到更平滑的输出,这对我的应用程序来说更好,并且有意义,因为它现在依赖于更多可能用于控制异常值的变量。