keras GRU层中的返回状态和返回序列之间有什么区别?

时间:2019-02-26 14:10:24

标签: tensorflow machine-learning keras lstm recurrent-neural-network

在keras GRU层中,我似乎无法绕过返回状态和返回序列之间的差异。

由于GRU单元没有单元状态(等于输出),因此返回状态与keras GRU层中的返回顺序有何不同?

更具体地说,我建立了具有一个编码器层和一个解码器层的编码器-解码器LSTM模型。编码器层返回其状态(return_state = TRUE),解码器层将这些状态用作初始状态(initial_state = encoder_states)

当尝试对GRU层执行此操作时,我不了解在编码器和解码器层之间传递了什么状态。如果您可以澄清这一点,请告诉我。预先感谢。

1 个答案:

答案 0 :(得分:2)

GRU层的“状态”通常与“输出”相同。但是,如果传入return_state=Truereturn_sequence=True,则层的输出将在序列的每个元素之后输出,但是状态将仅是序列的最后一个元素被处理之后的状态。 / p>

这是使用GRU层的seq-2-seq网络的编码器/解码器的示例

#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的输出和状态将是相同的。