Keras中Conv2D的输入不正确

时间:2017-03-23 14:27:48

标签: python keras keras-layer

我正在尝试使用python中的深度学习来分析EEG数据。不幸的是,我也是python的新手,所以试图找到最简单的工具。这导致我去了Keras。

更确切地说,我正在尝试实现以下管道:

EEG analysis net from https://arxiv.org/abs/1610.01683

到目前为止,我似乎被困在“S1”或“C2”附近。到目前为止的想法是:

  • 输入EEG数据部分(我现在将使用1 x 6000)

  • 通过20个1D过滤器(1x200)

  • 运行它
  • 使用池20,步幅10(产生20个1x578数据点)对每个过滤器的输出进行最大池化
  • 将其“堆叠”成20 x 578矩阵
  • 通过内核大小为20 x 30
  • 的2D卷积运行

但是,下面的代码给出了以下错误:

model = Sequential()
model.add(Conv1D(input_shape=(1,6000), kernel_size=200,strides=1,
                 activation='sigmoid',filters=20))
model.add(MaxPooling1D(pool_size=20, strides=10,padding='same'))
model.add(Conv2D(filters=400,kernel_size=(20,30),strides=(1,1),activation='sigmoid'))

输出:

ValueError: Input 0 is incompatible with layer conv2d_4: expected ndim=4, found ndim=3

我确信这是一个微不足道的错误,但通过keras文档并没有让我更聪明。

我意识到上面跳过了“堆叠”程序,但我能找到的最接近的东西是Concatenate,而且只是抱怨我没有给它任何输入。

我正在使用theano 0.9.0.dev和keras 2.0.2

1 个答案:

答案 0 :(得分:2)

您需要在从1D到2D之前重塑数据。在Keras有dedicated layer。我想,你的模型可能会这样开始:

model = Sequential()
model.add(Conv1D(input_shape=(6000,1),kernel_size=200,strides=1,
             activation='sigmoid',filters=20))
model.add(MaxPooling1D(pool_size=20, strides=10,padding='same'))
model.add(Reshape((-1, 581, 20)))
model.add(Conv2D(filters=400,kernel_size=(20,30),strides=(1,1), 
             activation='sigmoid'))

我还将input_shape替换为默认维度排序。