tensorflow dynamic_rnn和rnn之间的区别是什么?

时间:2016-09-27 20:54:15

标签: tensorflow recurrent-neural-network

tf.nn中有几个与RNN相关的类。在我在网络上找到的示例中,tf.nn.dynamic_rnntf.nn.rnn似乎可以互换使用,或者至少我似乎无法弄清楚为什么用一个代替另一个。有什么区别?

2 个答案:

答案 0 :(得分:48)

来自RNNs in Tensorflow, a Practical Guide and Undocumented Features的Denny Britz,发表于2016年8月21日。

  

tf.nn.rnn为固定的RNN长度创建展开的图表。那   意味着,如果您使用输入具有200个时间步长来呼叫tf.nn.rnn   创建一个包含200个RNN步的静态图。首先,图形创建是   慢。其次,您无法传递比(。> 200)更长的序列(> 200)   你最初指定的。

     

tf.nn.dynamic_rnn解决了这个问题。它动态地使用tf.While循环   在执行时构造图形。这意味着图形创建是   更快,您可以提供可变大小的批次。

答案 1 :(得分:2)

它们几乎相同,但输入和输出结构略有不同。来自文档:

  

tf.nn.dynamic_rnn

     

此函数在功能上与上面的函数rnn相同,但是>执行完全动态展开输入。

     

rnn不同,输入输入不是Tensors的Python列表,一个用于   每一帧。相反,输入可以是单个Tensor,其中最大值   时间是第一维或第二维(参见参数   time_major)。或者,它可能是(可能是嵌套的)元组   张量,每个都具有匹配的批次和时间维度。该   相应的输出是具有相同数字的单个Tensor   时间步长和批量大小,或者这样的(可能是嵌套的)元组   张量,匹配cell.output_size的嵌套结构。

有关详情,请浏览source