我正在按照本教程(https://theneuralperspective.com/2016/11/20/recurrent-neural-networks-rnn-part-3-encoder-decoder/)使用tensorflow实现RNN。
我已经为所描述的编码器和解码器准备了输入数据,但是我无法理解tensorflow上的dynamic_rnn函数是如何期望这个特定任务的输入所以我将要描述我现在拥有的数据希望有人有个主意。
我有20个英语和法语句子。如上面的链接所述,每个句子根据每种语言中最长的句子填充,并且GO和EOS的标记会在预期的位置添加。
由于并非链接上的所有代码都可用,我尝试为自己做一些缺失的代码。这就是我的编码器代码的样子
with tf.variable_scope('encoder') as scope:
# Encoder RNN cell
self.encoder_lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(hidden_units, forget_bias=0.0, state_is_tuple=True)
self.encoder_cell = tf.nn.rnn_cell.MultiRNNCell([self.encoder_lstm_cell] * num_layers, state_is_tuple=True)
# Embed encoder RNN inputs
with tf.device("/cpu:0"):
embedding = tf.get_variable(
"embedding", [self.vocab_size_en, hidden_units], dtype=data_type)
self.embedded_encoder_inputs = tf.nn.embedding_lookup(embedding, self.encoder_inputs)
# Outputs from encoder RNN
self.encoder_outputs, self.encoder_state = tf.nn.dynamic_rnn(
cell=self.encoder_cell,
inputs=self.embedded_encoder_inputs,
sequence_length=self.seq_lens_en, time_major=False, dtype=tf.float32)
我的嵌入形状[20,60,60],但我认为这是不正确的。如果我查看dynamic_rnn(https://www.tensorflow.org/api_docs/python/tf/nn/dynamic_rnn)的文档,那么输入的大小应该是[batch,max_time,...]。如果我在这里查看这个例子(https://medium.com/@erikhallstrm/using-the-dynamicrnn-api-in-tensorflow-7237aba7f7ea#.4hrf7z1pd),那么输入应该是[batch,truncated_backprop_length,state_size]。
编码器句子的最大长度为60.这就是我对输入的最后2个数字究竟应该是什么感到困惑的地方。 max_time也应该是我的句子序列的最大长度,或者应该是另一个数量。最后一个数字也应该是句子序列的最大长度或没有填充的当前输入的长度吗?