期望 conv1d_1_input 具有形状 (15, 512) 但得到形状为 (4, 512) 的数组

expected conv1d_1_input to have shape (15, 512) but got array with shape (4, 512)

我正在 python 中使用 keras 进行情绪分析项目,使用 CNN 和 word2vec 作为嵌入方法。 根据我的代码,我设置了我的输入形状,15 和 512,所以当我想预测一个新句子的极性时说:"I am so sorry" 例如,长度:4 - 我遇到这个错误:

expected conv1d_1_input to have shape (15, 512) but got array with shape (4, 512) and this is a part of my code:

model = Sequential()
model.add(Conv1D(32, kernel_size=3, activation='elu', padding='same', 
input_shape=(15, 512)))
model.add(Conv1D(32, kernel_size=3, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=3, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=3, activation='elu', padding='same'))
model.add(Dropout(0.25))
model.add(Conv1D(32, kernel_size=2, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=2, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=2, activation='elu', padding='same'))
model.add(Conv1D(32, kernel_size=2, activation='elu', padding='same'))
model.add(Dropout(0.25))
model.add(Dense(256, activation='relu')
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(2, activation='softmax'))

我所能做的就是制作新的 python 文件并加载我所有的相关模型,例如 word2vec ... 并像这样更改输入形状:

model111 = Sequential()
model111.add(Conv1D(32, kernel_size=3, activation='elu', padding='same', 
input_shape=(len(input), 512)))
model111.add(Dense(256, activation='relu'))
model111.add(Dense(256, activation='relu'))
model111.add(Dropout(0.5))
model111.add(Flatten())
model111.add(Dense(2, activation='softmax'))

我想知道这个方法好不好??任何有效的解决方案将不胜感激

当您的输入尺寸小于模型预期的尺寸时,您需要进行填充(即在输入数组的末尾添加零以在提供给模型之前完成预期尺寸。有一个 keras 函数可以这样做:

from keras.preprocessing.sequence import pad_sequences
input_array = pad_sequences(input_array, maxlen=max_tweet_length, padding='post')

然后,重塑您的数据以使其符合 CNN 的预期空间性:

input_array = input_array.reshape(input_array.shape + (1,))

根据 Eduardo Soares 的说法,我应该直接填充我的输入句子或使用 pad_sequences 函数,如下所示:

from keras.preprocessing.sequence import pad_sequences
input_array = pad_sequences(input_array, maxlen=max_tweet_length, padding='post')

然后我得到这个错误:

when checking input: expected conv1d_1_input to have 3 dimensions, but got array with shape (1, 15)

这与 ex-error 无关,根据我的理解,这与输入形状有关,所以我应该在填充后重塑我的输入(这里 input_array)所以我用这段代码试了一下:

input_array = input_array.reshape(input_array.shape + (1,))

一切顺利!希望这会有所帮助