Я пытаюсь работать с наборами твитов авиакомпании, и я исследовал несколько возможностей для этого. Я видел некоторые другие учебники, в которых люди использовали матрицу подсчета (из sklearn CountVectorizer), а затем использовали CNN с довольно хорошими результатами.
Тем не менее, у меня получаются лучшие результаты с базовым ANN (3 * 100 плотных слоев) с матрицей Tf-IDF в качестве входных данных (из sklearn TfidfVectorizer), поэтому я хотел бы объединить два: CNN с Tf-Idf матрица в качестве входа.
Я могу сделать это так:
model = Sequential()
model.add(layers.Embedding(input_dim=input_shape[1], output_dim=200, input_length=input_shape[1]))
model.add(layers.Conv1D(128, 5, activation='relu', input_shape=(90051, 1)))
[rest of model]
но я бы хотел удалить слой для встраивания, так как не думаю, что он сильно помогает с матрицей tf-idf (может быть, это неправильно, но я хотел бы попробовать).
Однако, когда я запускаю это:
model = Sequential()
model.add(layers.Conv1D(128, 5, activation='relu', input_shape=(90051, 1)))
сборка и компоновка модели работает хорошо, но при подгонке я получил следующую ошибку:
ValueError: Error when checking input: expected conv1d_3_input to have 3 dimensions, but got array with shape (10248, 90051)
Я попытался изменить данные, как указано в этом SO-ответе , например:
tt = np.reshape(transformed, (transformed.shape[0], transformed.shape[1], 1))
print(tt.shape)
tt = transformed
tt.shape = (transformed.shape[0], transformed.shape[1], 1)
print(tt.shape)
но форма данных остается неизменной после изменения формы (не знаю почему).
Так может кто-нибудь, пожалуйста, указать мне, почему я делаю неправильно? Это плохая идея с самого начала, или я должен покинуть слой внедрения (результаты не так хороши), или я должен попробовать изменить форму по-другому?
Большое спасибо за вашу помощь