我试图在EEG数据的10s段上运行1D CNN,然后使用RNN覆盖段之间的时间连接 .
问题是,当CNN输出 batch_size x num_filters x sequence_length
时,RNN期望输入 batch_size x sequence_length x num_inputs
这可以通过暗淡 - 混洗层来解决
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现在只覆盖时间连接 within sequence_length,但不是 between 不同的批次,是吗?
如何获得段之间的时间连接?
1 回答
回答我自己的问题:
RNN确实只会在一批中学习依赖关系 . 但是,Keras有一种模式允许状态在批次之间转换:
stateful=True
network = keras.layers.LSTM(network, stateful=True)
现在以正确的顺序提供批次是很重要的:每个批次的第i个元素将在时间t-1以第i个批次的状态学习 . 这意味着在喂食批次时需要非常小心 .
注意,这只会转换单元状态,而不会在批次之间反向传播 . 作为副作用,您必须设置预测时的初始状态并使结果产生偏差 .