Keras 中 Conv2D 的输入不正确
Incorrect input to Conv2D in Keras
我正在尝试学习在 python 中使用深度学习来分析 EEG 数据。不幸的是,我也是 python 的新手,所以我试图找到最简单的可用工具。这让我想到了 Keras。
更准确地说,我正在尝试实现以下管道:
到目前为止,我似乎被困在 "S1" 或 "C2" 附近。到目前为止的想法是:
EEG 数据的输入部分(我现在将使用 1 x 6000)
运行 通过 20 个一维滤波器 (1x200)
- 使用池 20、步长 10(产生 20 个 1x578 数据点)对每个过滤的输出进行最大池化
- "stack" 这变成一个 20 x 578 矩阵
- 运行 这是通过内核大小为 20 x 30
的二维卷积实现的
但是,下面的代码给出了以下错误:
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 文档并没有让我变得更聪明。
我意识到上面跳过了 "stacking" 过程,但我能找到的最接近的是连接,它只是抱怨我没有给它任何输入。
我正在使用 theano 0.9.0.dev 和 keras 2.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
替换为默认维度排序。
我正在尝试学习在 python 中使用深度学习来分析 EEG 数据。不幸的是,我也是 python 的新手,所以我试图找到最简单的可用工具。这让我想到了 Keras。
更准确地说,我正在尝试实现以下管道:
到目前为止,我似乎被困在 "S1" 或 "C2" 附近。到目前为止的想法是:
EEG 数据的输入部分(我现在将使用 1 x 6000)
运行 通过 20 个一维滤波器 (1x200)
- 使用池 20、步长 10(产生 20 个 1x578 数据点)对每个过滤的输出进行最大池化
- "stack" 这变成一个 20 x 578 矩阵
- 运行 这是通过内核大小为 20 x 30 的二维卷积实现的
但是,下面的代码给出了以下错误:
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 文档并没有让我变得更聪明。
我意识到上面跳过了 "stacking" 过程,但我能找到的最接近的是连接,它只是抱怨我没有给它任何输入。
我正在使用 theano 0.9.0.dev 和 keras 2.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
替换为默认维度排序。