【问题标题】:Incorrect input to Conv2D in KerasKeras 中的 Conv2D 输入不正确
【发布时间】:2017-03-23 14:27:48
【问题描述】:

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

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

到目前为止,我似乎被困在“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

【问题讨论】:

    标签: python keras keras-layer


    【解决方案1】:

    在从 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 替换为默认维度排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2018-08-15
      • 2020-03-10
      • 2020-04-29
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      相关资源
      最近更新 更多