В чем разница между состоянием возврата и последовательностью возврата в слое keras GRU? - PullRequest
0 голосов
/ 26 февраля 2019

Кажется, я не могу обернуть голову вокруг разницы между состоянием возврата и последовательностью возврата в слое keras GRU.

Поскольку блок GRU не имеет состояния ячейки (он равен выходному сигналуЧем отличается возвращаемое состояние от возвращаемой последовательности на уровне keras GRU?

Более конкретно, я построил модель LSTM кодера-декодера с одним уровнем кодера и одним уровнем декодера.Уровень кодировщика возвращает свое состояние (return_state = TRUE), а уровень декодера использует эти состояния в качестве начального состояния (initial_state = encoder_states).

При попытке сделать это со слоями GRU я не понимаю, какие состояния передаются между кодером ислой декодера.Пожалуйста, дайте мне знать, если вы можете уточнить это.Заранее спасибо.

1 Ответ

0 голосов
/ 26 февраля 2019

«Состояние» слоя GRU обычно будет таким же, как «выход».Однако, если вы передадите return_state=True и return_sequence=True, то выход слоя будет выводиться после каждого элемента последовательности, а состояние будет только состоянием после обработки последнего элемента последовательности.

Вот пример кодера / декодера для сети seq-2-seq, использующей слои GRU

#Create layers
encoder_input_layer = Input(shape=(None,))
encoder_embedding_layer = Embedding(len(vocab), THOUGHT_VECTOR_SIZE)
encoder_gru_layer = GRU(THOUGHT_VECTOR_SIZE, return_state=True)

decoder_input_layer = Input(shape=(None,))
decoder_embedding_layer = Embedding(len(vocab), THOUGHT_VECTOR_SIZE)
decoder_gru_layer = GRU(THOUGHT_VECTOR_SIZE, return_sequences=True)
decoder_dense_layer = Dense(len(vocab), activation='softmax')


#connect network
encoder = encoder_embedding_layer(encoder_input_layer)
encoder, encoder_state = encoder_gru_layer(encoder)

decoder = decoder_embedding_layer(decoder_input_layer)
decoder = decoder_gru_layer(decoder, initial_state=encoder_state)
decoder = decoder_dense_layer(decoder)

model = Model([encoder_input_layer, decoder_input_layer], decoder)

Но с вашей точки зрения, использование return_state здесь на самом деле не нужно в качестве вывода и состояния изencoder_gru_layer будет таким же.

...