我在TensorFlow中使用tf.nn.dynamic_rnn
运行LSTM。我有一个包含N
个初始状态向量的张量和一个包含M = N * n
个输入的张量。每组序列由n
个输入项组成,我希望用第i
个初始状态向量评估第i
组输入向量,如下所示:
inputs[0:n], initial_states[0]inputs[n:2*n], initial_states[1]...
是否可以直接使用tf.nn.dynamic_rnn
和上述张量进行一次调用,还是我必须对每个初始状态向量及其对应的输入使用循环(导致len(initial_states)
次对tf.nn.dynamic_rnn
的调用)?
回答:
(从问题的评论中添加一些细节)
这种批处理方式得到了很好的支持,并且通常是获得良好性能的必要条件。您的initial_state将有一个跨N
的批次维度,RNN将在这些批次上运行n
步。您只需将输入重塑为[N, n, …](在time_major=False
的情况下,这是默认设置)。
当您有需要一起批处理的可变长度输入时,情况会变得更加复杂。像SequenceQueueingStateSaver这样的工具可以帮助解决这个问题。