Conv1d图层上的input_shape有问题

时间:2020-09-08 14:23:11

标签: keras conv-neural-network keras-layer

我正在尝试使用CNN进行情感分类。该错误似乎与input_shape参数有关。

x数据由使用tokenizer.texts_to_sequences创建的整数数组组成。

? x_train.shape 
(4460, 20)
? x_trains.shape[0]
array([  49,  472, 4436,  843,  756,  659,   64,    8, 1328,   87,  123,
        352, 1329,  148, 2996, 1330,   67,   58, 4437,  144])

y数据由一个用于分类的热编码值组成。

y_train.shape
(4460, 2)
y_train[0]
array([1., 0.], dtype=float32)

这是模型:

model.add(layers.Conv1D(filters=256, kernel_size=3, activation='relu', input_shape=(max_seqlen,)))
model.add(layers.SpatialDropout1D(0.2))
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Dense(100, activation='relu'))
model.add(layers.Dense(num_classes, activation="softmax"))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    
history = model.fit(x_train, y_train, epochs=3, batch_size=512, 
                    validation_data=(x_val, y_val), class_weight=label_weights)

添加Conv1D层时引发错误。消息是:

“输入0与conv1d_1层不兼容:预期ndim = 3,找到的ndim = 2”

我不知道我在做什么错。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

Conv1D需要2D输入(我不知道为什么会这样)。由于您的输入仅为一维,因此尺寸不匹配。恐怕您可能不得不坚持使用其他keras图层类型,或者重新调整数据的形状以使其为(4460,20,1),从而允许在其上传递conv1D。