Keras 中情景模式的多对一循环网络

Many to one recurrent network for episodic patterns in Keras

我正在尝试使用 Keras 构建循环神经网络。我将 .

中的讨论作为基础

但是,在最初的讨论中提出的解决方案中,据我了解,没有"episode"的概念。让我解释一下我的意思。

假设您有 6 个实例 x1、x2、x3、x4、x5、x6。给定大小为 3 的循环 window,第一个输出为 x3。我将其称为 y3。所以,没有情节概念的输入输出对看起来像这样:

但是,我的数据具有明确的边界。我会在这个例子中有两集,所以训练对看起来像这样:

我的问题:是否可以在 Keras 中执行此操作?

我应该如何保持我的输入输出对组织?对于 x3 和 x6 以外的所有输入,网络应该不产生预测(无输出)。

PS:我可能会用LSTM或者经典递归。如果有使用 LSTM 的解决方案,我希望能够在每一集之后重置内存。

提前致谢。

我相信这可以通过退后一步并重组和重塑您提供给 RNN 模型本身的数据来实现。冒着听起来冗长的风险,我提供以下解释:

你应该有一个 X 和一个 y。我建议将这两个作为 3D NumPy 数组,其中

  • array[i] 访问特定序列 i
  • array[i][j] 访问特定序列的特定时间步长 j i
  • array[i][j][k] 在特定时间步 j 访问特定特征 k 对于特定序列i(注意 k 对于 y 的长度将等于 1,因为我们每个时间步仅预测一个目标)

所以假设你有 8 个序列、3 个时间步长和 5 个特征

shape(X)
# (8, 3, 5) 

shape(y)
# (8, 3, 1)

现在假设您已经以这种方式构建数据,您所要做的就是确保 Xy训练实例以您想要的方式相互匹配。要使用您的注释:

print(X[0][0])
# [x1, x2, x3]

print(y[0][0])
# [y3]

print(X[1][0])
# [x4, x5, x6]

print(y[1][0])
# [y6]

现在假设您已经有了这个 (序列、时间步长、特征) 3D NumPy 数组结构,用于您输入模型的数据。只需从 Xy 中删除您不想删除的训练实例。

  • [x1, x2, x3], [y3]
  • [x2, x3, x4], [y4]
  • [x3, x4, x5], [y5]
  • [x4, x5, x6], [y6]