Conv1d图层上的input_shape有问题

问题描述

我正在尝试使用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”

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

解决方法

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