2017-01-18 10 views
1

SKLearn TfidfvectorizerとKerasを組み合わせようとしていますが、次のエラーが発生しました: 例外:モデル入力をチェックしているときにエラーが発生しました:dense_input_1 126)の形をしていますが、形が整っています(700,116)SKlearn Tfidfvectorizer with Keras:予想されるdense_input_1の形状が

マトリックスの形状と関係がありますが、解決方法がわかりません。

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

あなたの寸法は明確に一致していない、x_train_vec、x_test_vecの形状、およびinput_dimに何をしています最初の密な層? –

+0

x_train_vec.shape =(2000,126)、x_test_vec.shape =(700,116)。 input_dimは現在x_train_vec.shape [1] – Jab

+1

と定義されています。問題はDenseが固定寸法データを取り、列車データが2000次元で、テストデータが700次元であることがわかりました。これは動作しません。 –

答えて

1

問題がx_trainとx_testの次元の差です。 tfidfvectorizerの最大機能を変更することで問題は解決しました。あなたのテストセットをベクトル化すると

vectorizer = TfidfVectorizer(analyzer=self.identity, use_idf=True, max_features=100) 
+0

これは間違っています。 @gatはそれを正しく取得します。それはクラッシュすることはありませんが、科学的に間違っています。このようなトレーニングでは、テストのデータを使用します。 –

1

、あなたはtransformを呼び出す必要はありませんfit_transform

x_train_vec = vectorizer.fit_transform(x_train).toarray() 
x_test_vec = vectorizer.transform(self.x_test[i]).toarray() 
関連する問題