ValueError: вход 0 плотного слоя несовместим со слоем: ожидаемая ось -1 входной формы должна иметь значение 896, полученная входная форма [None, 128] - PullRequest
0 голосов
/ 20 июня 2020

Я использую архитектуру CNN (см. Код ниже) для задачи классификации текста (с 5 классами). Данные, которые я использую: reviews_Home_and_Kitchen_5. json загружено с здесь

Я создал матрицу встраивания предложений для 1000 предложений с встраиванием из модели перчатки ('glove.840B.300d.txt')

Модель компилируется, и вы можете увидеть сводку ниже. Однако всякий раз, когда я пытаюсь соответствовать модели, я продолжаю получать следующую ошибку: ValueError: Вход 0 плотного слоя несовместим со слоем: ожидаемая ось -1 входной формы должна иметь значение 896, но полученный вход with shape [None, 128]

Решения, которые я нашел в Интернете, включают использование другой версии TF или другой функции потерь. Я попробовал оба варианта и не смог решить проблему.

Кто-нибудь может помочь?

sequence_input = Input(shape=(len(glove_sentence_embedding_matrix),), dtype='int32')
embedded_sequences = Embedding(input_dim=glove_results.shape[0], output_dim=300, weights=[glove_results], trainable=False, name='embedding')(sequence_input)
l_cov1= Conv1D(128, 5, activation='relu', name='conv1D_1')(embedded_sequences)  #  padding='same'
l_pool1 = MaxPooling1D(5, name='MaxPool_1')(l_cov1)
l_cov2 = Conv1D(128, 5, activation='relu', name='conv1D_2')(l_pool1)
l_pool2 = MaxPooling1D(5, name='MaxPool_2')(l_cov2)
l_cov3 = Conv1D(128, 5, activation='relu', name='conv1D_3')(l_pool2)
l_pool3 = MaxPooling1D(5, name='MaxPool_3')(l_cov3)  
l_flat = Flatten(name='flatten')(l_pool3)
l_dense = Dense(128, activation='relu',  name='dense')(l_flat)
preds = Dense(5, activation='softmax', name='preds')(l_dense)
model = Model(sequence_input, preds, name='CNN_for_text_classification')

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

print(model.summary())
model.fit(glove_sentence_embedding_matrix, df.overall, epochs=2, verbose=1)  ## glove_sentence_embedding_matrix.shape = (1000,300)

введите описание изображения здесь

1 Ответ

0 голосов
/ 20 июня 2020

Измените количество единиц на 896 дюймов l_dense. Или добавьте перед ним слой Dense с 896 единицами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...