Я пытаюсь создать модель LSTM / GRU в керасе для классификации данных статей в одном из 4 классов.
input > embedding layer > LSTM/GRU layer > [context vector] > Dense(softmax activation) > output class
Во входных данных обучения имеется 39978 статей, в каждой статье 20 предложений и в каждом предложении 20 слов. Что касается целевой переменной, то существует 4 целевых класса.
x_train.shape
равно (39978, 20, 20)
и
y_train.shape
равно (39978, 4)
embedding_matrix.shape
равно (27873, 100)
embedding_matrix создается в словаре с glove.6B.100d.txt
Я пытаюсь создать последовательную модель, как показано ниже
vocab_size = len(tokenizer.word_index.keys()) # 27873
MAX_SENT_LENGTH = 20
model = Sequential()
embedding_dimentations = embedding_matrix.shape[1]
e = Embedding(vocab_size,
embedding_dimentations,
weights=[embedding_matrix],
input_length=MAX_SENT_LENGTH,
trainable=False)
model.add(e)
model.add(Bidirectional(GRU(embedding_dimentations, dropout=0.25, recurrent_dropout=0.25)))
model.add(Dense(4, activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
на модели выше, если я выполнить подбор
batch_size = 128
epochs = 3
print('Training.....')
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
validation_split=.2)
Я получаю следующую ошибку
ValueError: Ошибка при проверке ввода: ожидалось, что embedding_6_input имеет 2 измерения, но получил массив с формой (39978, 20, 20)
Я попытался указать кортеж входной формы в Embedding (), но он не работает. Может кто-нибудь направить меня в правильном направлении?
Спасибо