ValueError:“ conv1d_1 / convolution / Conv2D

时间:2018-10-26 17:19:12

标签: python-3.x keras conv-neural-network convolution keras-layer

二进制分类问题:我想要一个输入层(可选),一个Conv1D层,然后输出1个神经元的输出层,预测1或0。
这是我的模特:

x_train = np.expand_dims(x_train,axis=1)
x_valid = np.expand_dims(x_valid,axis=1)
#x_train = x_train.reshape(x_train.shape[0], 1, x_train.shape[1])
#x_valid = x_train.reshape(x_valid.shape[0], 1, x_train.shape[1])

model = Sequential()

#hidden layer
model.add(Convolution1D(filters = 1, kernel_size = (3),input_shape=(1,x_train.shape[2])))
#output layer
model.add(Flatten())
model.add(Dense(1, activation = 'softmax'))

sgd = SGD(lr=0.01, nesterov=True, decay=1e-6, momentum=0.9)

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

print('model compiled successfully')
model.fit(x_train, y_train, nb_epoch = nb_epochs, validation_data=(x_valid,y_valid), batch_size=100)

输入形状:x_train.shape =(5,1,133906)分别是(批,步,通道)。通过expand_dims添加的步骤。实际大小(5,133906)是长度为133906的时间序列数据的5个样本,有时在2 ms或有时在5 ms随机采样。

错误消息 ValueError:尺寸为负的尺寸,是将输入形状为[?,1,1,''的'conv1d_1 / convolution / Conv2D'(op:'Conv2D')从1中减去3引起的133906],[1,3,133906,1]。

我该如何解决这个问题?在Conv1D内部传递的x_train和input_size参数的大小应该是多少?

1 个答案:

答案 0 :(得分:0)

Convolution1D图层以[批量,步骤,通道]格式接受输入

卷积窗口的长度(内核大小)不能大于步数。

因此,如果你想使用你定义的输入形状:

x_train.shape = (5,1,133906)

需要内核的大小更改为1

即将第9行更改为

model.add(Convolution1D(filters = 1, kernel_size = 1,input_shape=(1,x_train.shape[2])))

但是,这只会使您的示例生效。根据您的目标,数据类型等,您可能想尝试内核大小和输入数据维的不同组合以获得最佳结果。