2016-08-24 116 views
2

Keras新手Keras警报!Keras SimpleRNN输入形状和掩蔽

我得在Keras与复发层(超过theano)一些问题

  1. 如何应该输入关于时间步长(例如说我想,这将有3个时间步长1层进行格式化在过去1和当前1)我看到一些answers和API提出填充和使用嵌入层或使用时间窗口(在这种情况下3)塑造输入,在任何情况下,我不能让头或者API和SimpleRNN例子的尾巴很少,似乎也不同意。
  2. 输入时间窗口格式化如何与掩膜层一起使用?
  3. 一些相关的答案建议使用嵌入层执行屏蔽。掩盖与嵌入层有什么关系,是不是嵌入层基本上是单热词嵌入? (我的应用程序会使用音素或字符作为输入)
+0

我建议你在你的问题中增加更多信息。 – KenobiShan

回答

2

我可以开始一个答案,但这个问题非常广泛,所以我将不胜感激关于改进我的答案的建议。

  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.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. 据我所知,嵌入是独立的掩码,但你可以掩盖一个嵌入。

希望能提供一个很好的起点!

+0

谢谢,我知道现在如何做到这一点,但掩蔽链接确实有帮助,并且在Keras中存在一个常规维度问题,我写的每个网络都存在维度问题,并且总是需要一段时间才能找出问题,在我看来,层没有很好的文档记录,现在我的建议是不会为以往经常回头查看源代码或无耻复制示例并从那里开始工作而感到羞耻。 –