Keras:1D输入的卷积层

时间:2018-04-09 18:25:56

标签: python machine-learning deep-learning keras conv-neural-network

我无法为1D输入向量构建CNN。

输入值示例:

df_x.iloc[300]
Out[33]:
0     0.571429
1     1.000000
2     0.971429
3     0.800000
4     1.000000
5     0.142857
6     0.657143
7     0.857143
8     0.971429
9     0.000000
10    0.000000
11    0.000000
12    0.000000
13    0.000000
14    0.000000
15    0.000000
Name: 300, dtype: float64

输出值示例:

df_y.iloc[300]
Out[34]:
0     0.571429
1     0.914286
2     1.000000
3     0.971429
4     0.800000
5     1.000000
6     0.914286
7     0.942857
8     0.800000
9     0.657143
10    0.857143
11    0.971429
12    0.000000
13    0.000000
14    0.000000
15    0.000000
16    0.000000
17    0.000000
18    0.000000
19    0.000000
20    0.000000
21    0.000000
22    0.000000

我有15k的训练样例。

df_x.shape
Out[28]:
(15772, 16)

df_y.shape
Out[29]:
(15772, 23)

我目前的模特:

model = Sequential()
model.add(Conv2D(5, df_x.shape[1], input_shape=(5, 1)))
model.add(Dense(46, activation='relu'))
model.add(Dense(56, activation='relu'))
model.add(Dense(66, activation='relu'))
model.add(Dense(56, activation='relu'))
model.add(Dense(46, activation='relu'))
model.add(Dense(df_y.shape[1], activation='relu'))

# compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

# Fit the model
model.fit(df_x, df_y, epochs=5, batch_size=10)

我想构建模型,其中第一个图层的尺寸为(5,1),5个滤镜和输入形状df_x.shape[1], 1

我有一个错误:

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

你能解释一下我如何为1D输入值建立CNN?

1 个答案:

答案 0 :(得分:2)

您应该使用Conv1D代替Conv2D

Conv2D被命名为二维,因为它旨在处理图像。但是,Conv2D的输入实际上是 4维 - (batch, width, height, channels);对于RGB,channels可以是3,对于灰度图像,1可以是ndim=4。这就是keras抱怨的原因:

  

ValueError:输入0与图层conv2d_10:expected不兼容   ndim=3,找到Conv1D

df_x接受 3维输入,这正是您所拥有的(只要您将(15772, 16, 1)扩展为input_shape)。此外,model.add(Conv1D(5, 5, input_shape=(df_x.shape[1], 1))) 参数必须与每行的大小相匹配。试试这个:

{{1}}