预期conv1d_1_input的形状为(15,512),但数组的形状为(4,512)

时间:2018-07-20 16:42:42

标签: python keras conv-neural-network prediction sentiment-analysis

我正在用keras在python中进行情感分析项目,使用CNN和word2vec作为嵌入方法。 根据我的代码,我将输入形状设置为15和512,因此当我要预测新句子的极性时,例如:“我很抱歉”,其长度为:4-我遇到此错误:

  

预期conv1d_1_input的形状为(15,512),但数组的形状为(4,512)   这是我的代码的一部分:

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'))

我想知道这种方法是否可以??任何有效的解决方案将不胜感激

2 个答案:

答案 0 :(得分:2)

如果输入的大小小于模型的预期大小,则需要进行填充(即在输入数组的末尾添加零以完成预期的大小,然后再提供给模型。有一个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,))

答案 1 :(得分:1)

根据 Eduardo Soares 所说,我应该直接填充输入句子或使用pad_sequences函数填充以下内容:

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

然后我得到了这个错误:

  

在检查输入时:预期conv1d_1_input具有3维,但是   得到了形状为(1,15)的数组

这与错误无关,据我了解,这与输入形状有关,因此我应该在填充(此处为input_array)后重塑输入的形状,因此我尝试使用以下代码:

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

一切正常!希望对您有所帮助