将 RNN 和 CNN 与千层面相结合

Posted

技术标签:

【中文标题】将 RNN 和 CNN 与千层面相结合【英文标题】:combining RNN and CNN with lasagne 【发布时间】:2017-08-29 07:11:31 【问题描述】:

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

问题是,RNN 期望输入 batch_size x sequence_length x num_inputs 而 CNN 输出 batch_size x num_filters x sequence_length

这可以通过一个 dim-shuffle 层来解决

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】:

回答我自己的问题:

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

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

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

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

【讨论】:

以上是关于将 RNN 和 CNN 与千层面相结合的主要内容,如果未能解决你的问题,请参考以下文章

Keras 功能 API:将 CNN 模型与 RNN 结合起来查看图像序列

使用 Keras 功能 API 将时间序列与 RNN/LSTM 中的时间不变数据相结合

CNN和Transformer相结合的模型

CNN和RNN在NLP任务中的对比实验

CNN + LSTM

文本分类A C-LSTM Neural Network for Text Classification