SKlearn Tfidfvectorizer与Keras:期望dense_input_1的形状

3
我正在尝试结合SKLearn的Tfidfvectorizer和Keras,但是我遇到了以下错误: 异常:在检查模型输入时出错:期望dense_input_1的形状为(None,126),但得到的数组形状为(700,116)
我理解这与矩阵的形状有关,但我无法解决它。
vectorizer = TfidfVectorizer(analyzer=self.identity, use_idf=True, max_features=2000)

#a list of sentences
x_train_vec = vectorizer.fit_transform(x_train).toarray()
x_test_vec = vectorizer.fit_transform(self.x_test[i]).toarray()

#labels
y_train = np_utils.to_categorical(y_train, self.nb_classes)
y_test = np_utils.to_categorical(y_test, self.nb_classes)

#get model
model = self.build_model(x_train_vec.shape[1])
model.fit(x_train_vec, y_train, nb_epoch=self.n_epochs, batch_size=self.batch_size, shuffle='batch', verbose=1, validation_data=(x_test_vec, y_test), )

建立模型:

def build_model(self, nb_features):
    print("Building model...")

    model = Sequential()
    model.add(Dense(input_dim = nb_features, output_dim = self.hidden_units_1))
    model.add(Activation('relu'))

你的维度明显不匹配,x_train_vec、x_test_vec和第一个Dense层的input_dim形状是什么? - Dr. Snoopy
x_train_vec.shape = (2000, 126),x_test_vec.shape = (700, 116)。input_dim当前被定义为x_train_vec.shape [1]。 - Jab
1
我看到了问题,Dense层需要固定维度的数据,而你的训练数据有2000个维度,而测试数据只有700个维度。这样是行不通的。 - Dr. Snoopy
你解决了这个问题吗? - Sreejithc321
2个回答

3
当你对测试集进行向量化时,你需要调用transform而不是fit_transform:
x_train_vec = vectorizer.fit_transform(x_train).toarray()
x_test_vec = vectorizer.transform(self.x_test[i]).toarray()

1
问题在于x_train和x_test的维度不同。通过更改tfidfvectorizer中的最大特征数解决了该问题。
vectorizer = TfidfVectorizer(analyzer=self.identity, use_idf=True, max_features=100)

1
这是错误的。@gat 是正确的。它不会崩溃,但科学上是不正确的。你应该像这样使用测试中的数据来进行训练。 - Martin Thoma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接