«Состояние» слоя 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 будет таким же.