【问题标题】:Keras SimpleRNN input shape and maskingKeras SimpleRNN 输入形状和掩码
【发布时间】:2016-12-31 06:26:26
【问题描述】:

Keras 新手警告!!!

我有一些与 Keras 中的循环层相关的问题(通过 theano)

  1. 关于时间步长的输入应该如何格式化(例如,我想要一个层有 3 个时间步长 1 在过去 1 在过去和 1 当前)我看到一些 answers 和 API 建议填充和使用嵌入层或使用时间窗口(在本例中为 3)对输入进行整形,在任何情况下我都无法确定 API 的正面或反面,SimpleRNN 示例很少而且似乎不同意。
  2. 输入时间窗口格式如何与遮罩层一起使用?
  3. 一些相关答案建议使用嵌入层执行屏蔽。无论如何,掩蔽与嵌入层有什么关系,嵌入层基本上不是 1-hot word embeddings 吗? (我的应用程序会使用音素或字符作为输入)

【问题讨论】:

  • 我建议您在问题中添加更多信息。

标签: nlp neural-network keras


【解决方案1】:

我可以开始回答,但这个问题非常广泛,所以我希望能提出改进我的回答的建议。

  1. Keras SimpleRNN 需要一个大小为(num_training_examples、num_timesteps、num_features)的输入。

例如,假设我有一个交叉路口每小时行驶的汽车数量的序列(只是为了说明的小例子):

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

顺便说一句:请注意,我在四个小时内进行了观察,而最后两个小时没有汽车驶过。这是对输入进行零填充的示例,这意味着通过在较短序列的末尾添加 0 以匹配最长序列的长度,使所有序列的长度相同。

Keras 会期望以下输入形状:(X.shape[0], X.shape1, 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. 据我所知,嵌入独立于掩码,但您可以屏蔽嵌入。

希望提供一个好的起点!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2019-09-21
    • 2020-06-10
    • 2017-08-14
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多