Используйте Tf-idf как функции в модели CNN - PullRequest
1 голос
/ 11 марта 2020

У меня есть модель CNN, которая отлично работает с матрицей word2ve c в качестве входных данных. Теперь я пытаюсь использовать функции tf-idf в качестве входных данных для моей модели CNN. Моя модель имеет 2 слоя свертки.

vectorizer = TfidfVectorizer(max_features=10000, use_idf=True)
vectorizer = vectorizer.fit(train_sentences)
tf_len = len(vectorizer.vocabulary_)
TF_X_train = vectorizer.transform(train_sentences).astype('float64')
TF_X_test = vectorizer.transform(test_sentences).astype('float64')
TF_X_val = vectorizer.transform(val_sentences).astype('float64')


input = Input(shape=(tf_len,1))
drop20 = SpatialDropout1D(0.3)(input)
conv2 = Conv1D(filters=128, kernel_size=5, activation='relu')(drop20)
drop21 = Dropout(0.5)(conv2)
conv22 = Conv1D(filters=64, kernel_size=5, activation='relu')(drop21)
drop22 = Dropout(0.5)(conv22)
pool2 = MaxPooling1D(pool_size=2)(drop22)
flat2 = Flatten()(pool2)
out = Dense(8, activation='sigmoid')(flat2)

model = Model(input, out)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()

Я получил следующую ошибку. Пожалуйста, предоставьте любые подсказки, чтобы решить мою проблему.

Я также пытался изменить входной слой на Input(batch_shape=(None,tf_len, 1)), но получил ту же ошибку.

ValueError: Ошибка при проверке ввода: ожидается, что input_1 to имеют 3 размера, но получили массив с формой (1000, 5008)

1 Ответ

0 голосов
/ 13 марта 2020

Указание ответа в этом разделе (ответа), даже если он уже присутствует в разделе комментариев.

Добавление строки кода ниже,

TF_X_train.reshape(TF_X_train.shape[0], TF_X_train.shape[1],1)

и изменение входного слоя

Input(batch_shape=(None, tf_len, 1))

исправил ошибку.

...