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

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

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

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

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

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

最佳答案

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

关于tensorflow - keras GRU 层中的返回状态和返回序列有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54887411/

相关文章:

tensorflow - 如何将大 float 保存为 TFRecord 格式? float_list/float32 似乎截断了值

python - Numpy 和 TensorFlow 之间的差异

python - Keras 模型未能减少损失

python - Keras:如何保存模型或权重?

tensorflow - 如何在 Keras 中按组对输入样本进行平均?

TensorFlow 未检测到 GPU

Python-Classifier-Xgboost - 在 GridSearchCV 中显示带有参数、持续时间、分数的 cv

python - 使用 StandardScaler 使用特定功能缩放具有不同形状的数组

python - 如何使用已解析的 TFRecords 数据?

python - Keras 分类交叉熵 softmax input.dim_size 错误