我想在一对一模式下使用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酒店
答案 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
。