Плотный слой Keras после LSTM с return_sequence=True

#python #keras #deep-learning #nlp

#python #keras #глубокое обучение #nlp

Вопрос:

Я пытаюсь переопределить эту статью 1 в Keras, поскольку авторы использовали PyTorch 2. Вот сетевая архитектура: введите описание изображения здесь То, что я сделал до сих пор, это:

 number_of_output_classes = 1
hidden_size = 100
direc = 2
lstm_layer=Bidirectional(LSTM(hidden_size, dropout=0.2, return_sequences=True))(combined) #shape after this step (None, 200) 
#weighted sum and attention should be here
attention = Dense(hidden_size*direc, activation='linear')(lstm_layer) #failed trial
drop_out_layer = Dropout(0.2)(attention)    
output_layer=Dense(1,activation='sigmoid')(drop_out_layer) #shape after this step (None, 1)
  

Я хочу включить слой attention и последний слой FF после LSTM, но я сталкиваюсь с ошибками из-за размеров и параметра return_sequence = True.

Комментарии:

1. Любой репозиторий github, из которого вы можете поделиться своим кодом

Ответ №1:

Это задача классификации последовательностей. Классификация последовательностей — это сопоставление многих с одним, где последовательный ввод из помечен для одного класса. В этом случае ваши входные данные должны иметь форму (batch_size, time_steps, channels), а выходные данные должны иметь форму (batch_size, channels). Если return_sequences аргумент класса LSTM равен True , выходные данные будут иметь форму (batch_size, time_steps, channels) . Передача этого в плотные слои и выпадающий слой не уменьшит количество измерений. Чтобы уменьшить количество измерений до 2, вы должны установить return_sequences аргумент последнего слоя LSTM равным False . В вашем случае

 lstm_layer=Bidirectional(LSTM(hidden_size, dropout=0.2, return_sequences=False))(combined)

  

Комментарии:

1. Спасибо Mitiku за ваш ответ. Но, как я понял из рисунка, вывод также является последовательностью. Затем объедините это, верно?

2. Не совсем. На рисунке 2 показано обозначение предложений, то есть сопоставление последовательности с меткой, и результат — это не последовательность, а одно слово. Для сопоставления последовательности с последовательностью посмотрите рисунок 1 из упомянутой вами статьи.

3. @Mitiku : Хороший ответ, но я думаю, вы хотели сказать «Чтобы уменьшить количество измерений до двух, вы должны установить аргумент return_sequences последнего слоя LSTM в False». вместо True это правильно?