我正在用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'))
我想知道这种方法是否可以??任何有效的解决方案将不胜感激
答案 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,))
一切正常!希望对您有所帮助