【问题标题】:What is the difference between return state and return sequence in a keras GRU layer?keras GRU层中的返回状态和返回序列有什么区别?
【发布时间】:2019-02-26 14:10:24
【问题描述】:

我似乎无法理解 keras GRU 层中返回状态和返回序列之间的区别。

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

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

尝试使用 GRU 层执行此操作时,我不明白编码器和解码器层之间传递了哪些状态。如果您能澄清这一点,请告诉我。提前致谢。

【问题讨论】:

  • 你可以参考这个blog。它在 LSTM 的上下文中解释了您的问题。但是,可以提供一个基本概念,因为 GRU 和 LSTM 都是循环单元。

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


【解决方案1】:

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

这是一个使用 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 的输出和状态将是相同的。

【讨论】:

  • 感谢您的快速回复。那么具有两个隐藏 GRU 层的模型,其中只有 return_sequence 设置为 true,与您提出的编码器-解码器模型基本相同?
  • @StackMikeFlow 是的,在编码器 GRU 层上设置 return_state=True 并不是真正必要的。
猜你喜欢
  • 2019-06-12
  • 1970-01-01
  • 2011-12-24
  • 2020-09-10
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 2016-06-28
相关资源
最近更新 更多