首页 文章

将RNN和CNN与千层面相结合

提问于
浏览
0

我试图在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 回答

  • 0

    回答我自己的问题:

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

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

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

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

相关问题