ValueError: 在'conv1d_1/convolution/Conv2D'中,由于将3从1中减去导致负的维度大小。

10

二分类问题:我想要一个输入层(可选),一个Conv1D层,然后输出一个神经元的层,预测为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),表示分别为(batch,steps,channels)。步骤通过expand_dims添加。实际尺寸为(5,133906),其中有5个长度为133906的时间序列数据样本,有时在2毫秒处采样,有时在5毫秒处采样。

错误信息: ValueError: 由于从1中减去3导致负维度大小,因此'conv1d_1/convolution/Conv2D'(操作:'Conv2D')的输入形状为[?,1,1,133906],[1,3,133906,1]。

如何解决这个问题?x_train的大小和传递给Conv1D内的input_size参数应该是多少?
1个回答

9

卷积1D层以[批次,步数,通道数]的格式输入。

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

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

x_train.shape = (5,1,133906)

您需要将内核大小更改为1。

即更改第9行为

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

然而,这只是让你的示例代码能够运行。根据你的目标、数据类型等因素,你可能需要尝试不同的内核大小和输入数据维度组合来获得最佳结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接