将RNN和CNN与千层面相结合

时间:2017-04-04 07:46:45

标签: python theano recurrent-neural-network lasagne

我试图在EEG数据的10s段上运行1D CNN,然后使用RNN覆盖段之间的时间连接。

问题是,当CNN输出batch_size x sequence_length x num_inputs时,RNN期望输入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内,而不是不同的批次之间,是吗?

如何获得段之间的时间连接?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

RNN确实只会在一批中学习依赖关系。 但是,Keras有一种模式允许状态在批次之间转换:stateful=True

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

现在以正确的顺序提供批次非常重要: 将在时间t-1以第i批的状态学习每批的第i个元素。这意味着在喂食批次时需要非常小心。

注意,这只会转换单元格状态,而不会在批次之间反向传播。作为副作用,您必须设置预测时的初始状态并偏向结果。