我试图在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内,而不是在不同的批次之间,是吗?
如何获得段之间的时间连接?
答案 0 :(得分:0)
回答我自己的问题:
RNN确实只会在一批中学习依赖关系。
但是,Keras有一种模式允许状态在批次之间转换:stateful=True
network = keras.layers.LSTM(network, stateful=True)
现在以正确的顺序提供批次非常重要: 将在时间t-1以第i批的状态学习每批的第i个元素。这意味着在喂食批次时需要非常小心。
注意,这只会转换单元格状态,而不会在批次之间反向传播。作为副作用,您必须设置预测时的初始状态并偏向结果。