Keras SimpleRNN输入形状和屏蔽

时间:2016-08-24 08:12:45

标签: nlp neural-network keras

新手到Keras警报!!!

我在Keras(over theano)有一些与Recurrent Layers相关的问题

  1. 输入应该如何根据时间步长进行格式化(例如,我想要一个过去将来有3个1步1的图层,1个过去的1个)我看到一些answers和API建议填充和使用嵌入层或使用时间窗口(在这种情况下为3)对输入进行整形,在任何情况下我都无法使API和SimpleRNN示例的头部或尾部稀缺,似乎不同意。 / LI>
  2. 输入时间窗口格式如何与遮罩层一起使用?
  3. 一些相关答案建议使用嵌入层执行屏蔽。无论如何,屏蔽与嵌入图层有什么关系,基本上不是嵌入图层的1-hot word embeddings? (我的应用程序将使用音素或字符作为输入)

1 个答案:

答案 0 :(得分:2)

我可以回答一下,但这个问题非常广泛,所以我希望能够改进我的答案。

  1. Keras SimpleRNN需要输入大小(num_training_examples,num_timesteps,num_features)。
  2. 例如,假设我每小时都有一系列按交叉路口行驶的汽车数量(小例子只是为了说明):

    X = np.array([[10, 14, 2, 5], [12, 15, 1, 4], [13, 10, 0, 0]])
    

    除此之外:请注意,我在四个小时内进行了观察,最后两个小时没有驾驶汽车。这是对输入进行零填充的示例,这意味着通过将0添加到较短序列的末尾以使最长序列的长度匹配来使所有序列具有相同的长度。

    Keras期望以下输入形状:(X.shape [0],X.shape 1,1),这意味着我可以这样做:

    X_train = np.reshape(X, (X.shape[0], X.shape[1], 1))
    

    然后我可以将其提供给RNN:

    model = Sequential()
    model.add(SimpleRNN(units=10, activation='relu', input_shape = (X.shape[1], X.shape[2])))
    

    您可以添加更多图层,或添加正则化等,具体取决于您的任务性质。

    对于您的特定应用程序,我认为您需要重新设置输入以使每行包含3个元素(最后一步,当前,下一个)。

    1. 我对遮蔽层了解不多,但here is a good place to start

    2. 据我所知,嵌入与掩码无关,但您可以屏蔽嵌入。

    3. 希望提供一个良好的起点!