将 RNN 和 CNN 与千层面结合

斯克恩斯

我正在尝试在 10 秒的 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 现在将只覆盖序列长度时间连接,而不是不同批次之间时间连接,对吗?

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

斯克恩斯

回答我自己的问题:

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章