當試圖編譯一個具有一個經常性圖層的網絡時,我發現問題。似乎第一層的維度存在一些問題,因此我對Keras中RNN層的工作原理有所瞭解。Keras簡單的RNN實現
我的代碼示例是:
model.add(Dense(8,
input_dim = 2,
activation = "tanh",
use_bias = False))
model.add(SimpleRNN(2,
activation = "tanh",
use_bias = False))
model.add(Dense(1,
activation = "tanh",
use_bias = False))
該錯誤是
ValueError: Input 0 is incompatible with layer simple_rnn_1: expected ndim=3, found ndim=2
input_dim
無關的值將返回此錯誤。我錯過了什麼?
太棒了,謝謝你,另外一個問題。第一個解決方案是完美的,但是如果我想要有無限的時間步驟(理論問題,我知道,無限的時間步驟是愚蠢的)?然後,我必須使用你的第二個解決方案來重塑第一層的輸出。但是,我通過記憶XOR序列做了簡單的測試,當我對輸出進行混洗時,網絡未能按照我的預期做出反應。更好地說,它的輸出與之前的洗牌相同。如何重塑影響復發層的工作(與第一種解決方案相比)? – Seraph
整形只需要數據(任何數據),這只不過是按照分段劃分的一串連續數字。假設你有300個元素。當你像(30,10,1)那樣重塑它們時,你只需以不同的方式分離這300個元素。所以,如果你爲了序列目的而重塑形狀,你必須知道你想要達到什麼樣的目標,以及你的數據的格式是什麼,所以你可以用一個重要的方式來重塑它。 –
對於您的無限序列,您應該只使用1個樣本'(BatchSize = 1,TimeSteps,Features)'的輸入,並用'stateful = True'標記您的循環圖層。這意味着這些圖層將保持其記憶,並且下一批將被視爲以一個單一序列繼續前一批。在這種情況下,當您決定一個序列結束並且您將開始輸入另一個序列時,您必須手動「刪除存儲器」(稱爲「復位狀態」)。 –