从tf.nn.dynamic_rnn

时间:2018-05-15 20:34:30

标签: python tensorflow

我想在一对一模式下使用RNN(最后只有一个输出)。在张量流中,可以使用

lstm_cell = tf.nn.rnn_cell.LSTMCell(lstm_num_units)

output, _  = tf.nn.dynamic_rnn(lstm_cell, embed, dtype=tf.float32)

其中输出包含所有时间步[0, max_time-1]的输出,max_time是批次中最长输入的长度。

现在,我想获得批处理中每个输入的最后一个输出。让我更清楚一点。我在网上看到的所有实现都使用output[:,-1]作为最后一个输出。但是,对于已填充的输入,这意味着输出来自填充输入。

因此,问题:

1)仅使用output[:,-1]

是多么合理

2)是否有一种简单的方法可以选择张量流中非填充值的最后一个条目,对于批次中的每个输入,一般来说,这将是不同的时间步长。不知何故,我发现使用张量流张量进行必要的操作有点困难,即使我有所有输入序列的原始长度。

提前谢谢你,

Hayk酒店

1 个答案:

答案 0 :(得分:0)

修改代码:

_, state  = tf.nn.dynamic_rnn(lstm_cell, embed, dtype=tf.float32, sequence_length=some_placeholder)

last_output = state.h

如果您希望序列长度有所变化,请不要忘记在对sequence_length的调用中添加一个dynamic_rnn参数。

或者,您可以使用tf.gather_nd