【问题标题】:Many to one recurrent network for episodic patterns in KerasKeras中情节模式的多对一循环网络
【发布时间】:2018-08-29 16:10:03
【问题描述】:

我正在尝试使用 Keras 构建循环神经网络。我以here 的讨论为基础。

但是,据我了解,在原始讨论中提出的解决方案中,没有“情节”的概念。让我解释一下我的意思。

假设您有 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 的解决方案,我希望能够在每集之后重置内存。

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    • array[i] 访问一个特定的序列 i
    • array[i][j] 访问特定序列 i 的特定时间步 j
    • array[i][j][k] 在特定时间步 j 访问特定特征 k 用于特定序列 i (需要注意的是,yk 长度等于 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]

    【讨论】:

    • 谢谢,我采用了这种方法并且前段时间已经训练了网络。现在我只是不确定记忆是否在剧集之间重置,或者记忆中是否有一些残留物。
    猜你喜欢
    • 2018-06-29
    • 2016-11-20
    • 2017-12-20
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    相关资源
    最近更新 更多