2017-04-04 52 views
0

我想在腦電數據的10段中運行一維CNN,然後使用RNN覆蓋這些段之間的時間連接。將RNN和CNN與千層麪相結合

的問題是,該RNN預計輸入與batch_size x sequence_length x num_inputs而CNN的輸出batch_size x num_filters x sequence_length

這可以通過一個暗淡的洗牌層來解決

network = L.InputLayer(shape=(None, data_size[1], data_size[2]), input_var=input_var) 
network = L.Conv1DLayer(network, num_filters=32, filter_size = 5) 
network = L.DimshuffleLayer(network, (0, 2, 1)) 
network = L.LSTMLayer(network, 200) 

但我理解RNN現在將覆蓋暫時連接只有以內的sequence_length,而不是之間的不同批次,是這樣嗎?

如何獲得片段之間的時間連接?

回答

0

回答我的問題:

的RNN的確只有一個批次內學習的依賴。 然而,Keras具有模式,允許以狀態批次之間轉變:stateful=True

network = keras.layers.LSTM(network, stateful=True)

現在它以正確的順序喂批次是很重要的: 每批的第i個元素是在時間t-1學習第i批次的狀態。這意味着餵養你的批次時你需要非常小心。

請注意,這隻會轉換單元格狀態,不會在批次之間反向傳播。作爲一種副作用,您的初始狀態在預測時必須進行設置並對結果進行偏倚。