我已经将embedding_attention_seq2seq模块用于机器翻译任务,如以下教程所述:
https://www.tensorflow.org/versions/master/tutorials/seq2seq/index.html
在本教程中指定模型的seq2seq_model.py中,我注意到在默认情况下,如果在以下行中将use_lstm设置为false,则它们使用了use_lstm:
# Create the internal multi-layer cell for our RNN.
single_cell = tf.nn.rnn_cell.GRUCell(size)
if use_lstm:
single_cell = tf.nn.rnn_cell.BasicLSTMCell(size)
cell = single_cell
if num_layers > 1:
cell = tf.nn.rnn_cell.MultiRNNCell([single_cell] * num_layers)现在,如果编码器是双向的,并且上下文化同时考虑了隐藏层参数,那么本文中描述的这里在实现模型时所描述的注意机制具有更大的语义意义。seq2seq_model文件没有提到双向组件。
所以我的问题是,embedding_attention_seq2seq默认实现双向RNN编码器吗?
如果没有,它是否只是采用普通LSTM编码器的每一时间步骤的隐藏层输出,从而将上下文限制在其前面的句子中的单词上?
发布于 2016-10-26 22:13:56
所以我的问题是,embedding_attention_seq2seq默认实现双向RNN编码器吗?
不,它不实现双向RNN编码器。编码器的输出(用于构建注意状态)是在embedding_attention_seq2seq的前几行中构造的。
# Encoder.
encoder_cell = rnn_cell.EmbeddingWrapper(
cell, embedding_classes=num_encoder_symbols,
embedding_size=embedding_size)
encoder_outputs, encoder_state = rnn.rnn(
encoder_cell, encoder_inputs, dtype=dtype)第一行用嵌入包包装单元格。第二个在encoder_cell上运行encoder_inputs (tf/python/ops/rnn.py的第210-228行)。
如果没有,它是否只是采用普通LSTM编码器的每一时间步骤的隐藏层输出,从而将上下文限制在其前面的句子中的单词上?
是这样的。
https://stackoverflow.com/questions/40044937
复制相似问题