Построение сети LSTM с вложенным слоем в Керасе
Я хочу создать модель Keras, состоящую из слоя встраивания, за которым следуют два LSTM с dropout 0.5 и, наконец, плотный слой с активацией softmax.
Первый LSTM должен распространять последовательный вывод на второй слой, в то время как во втором я заинтересован только в получении скрытого состояния LSTM после обработки всей последовательности.Я попробовал следующее:
sentence_indices = Input(input_shape, dtype = 'int32')
embedding_layer = pretrained_embedding_layer(word_to_vec_map, word_to_index)
embeddings = embedding_layer(sentence_indices)
# Propagate the embeddings through an LSTM layer with 128-dimensional hidden state
X = LSTM(128, return_sequences=True, dropout = 0.5)(embeddings)
# Propagate X trough another LSTM layer with 128-dimensional hidden state
X = LSTM(128, return_sequences=False, return_state=True, dropout = 0.5)(X)
# Propagate X through a Dense layer with softmax activation to get back a batch of 5-dimensional vectors.
X = Dense(5, activation='softmax')(X)
# Create Model instance which converts sentence_indices into X.
model = Model(inputs=[sentence_indices], outputs=[X])
Однако я получаю следующую ошибку:
ValueError: Layer dense_5 expects 1 inputs, but it received 3 input tensors. Input received: [<tf.Tensor 'lstm_10/TensorArrayReadV3:0' shape=(?, 128) dtype=float32>, <tf.Tensor 'lstm_10/while/Exit_2:0' shape=(?, 128) dtype=float32>, <tf.Tensor 'lstm_10/while/Exit_3:0' shape=(?, 128) dtype=float32>]
Ясно, что LSTM-это не возвращая результат формы, которую я ожидаю. Как мне это исправить?
2 ответа:
Если вы задаете
Поэтому вместоreturn_state=True
, тоLSTM(...)(X)
возвращает три вещи: выходные данные, последнее скрытое состояние и последнее состояние ячейки.X = LSTM(128, return_sequences=False, return_state=True, dropout = 0.5)(X)
СделайтеX, h, c = LSTM(128, return_sequences=False, return_state=True, dropout = 0.5)(X)
Смотрите здесь для примера.