2016-08-24 125 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中存在一個常規維度問題,我寫的每個網絡都存在維度問題,並且總是需要一段時間才能找出問題,在我看來,層沒有很好的文檔記錄,現在我的建議是不會爲以往經常回頭查看源代碼或無恥複製示例並從那裏開始工作而感到羞恥。 –