Keras

时间:2018-03-20 17:53:12

标签: machine-learning neural-network deep-learning keras recurrent-neural-network

我正在尝试使用Keras构建一个递归神经网络。我以here提出的讨论为基础。

然而,在原始讨论中提出的解决方案中,据我所知,没有“#34;剧集”的概念。让我解释一下我的意思。

想象一下,你有6个实例x1,x2,x3,x4,x5,x6。给定大小为3的循环窗口,第一个输出为x3。我把它称为y3。因此,没有插曲概念的输入输出对看起来像这样:

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

然而,我的数据有明确的界限。我会在示例中有两集,因此训练对看起来像这样:

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

我的问题:在Keras可以这样做吗?

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

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

您应该有一个 X 和一个 y 。我建议将它们都作为3D NumPy数组,其中

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

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

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

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

现在假设您已经按照这种方式构造了数据,那么您要做的就是确保 X y 训练实例彼此匹配你渴望。要使用注释,请执行以下操作:

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数组结构。只需从 X y 中删除您不希望的训练实例。

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