static_rnn和dynamic_rnn有什么区别?

时间:2018-07-19 14:53:48

标签: python tensorflow

在张量流中,tf.nn.static_rnntf.nn.dynamic_rnn有什么区别,以及何时使用它们?

两者都采用sequence_length参数,该参数使计算适应输入的实际长度;并不是static_rnn限于固定大小的输入,对吧?

dynamic_rnn具有以下额外参数:

  • parallel_iterations
  • swap_memory
  • time_major

但是我想这些只是细微的差别。

那么tf.nn.static_rnntf.nn.dynamic_rnn之间的主要区别是什么,我们什么时候应该在另一个之上使用呢?

1 个答案:

答案 0 :(得分:5)

这仍然是一个有用的资源(尽管几年前已经写过): http://www.wildml.com/2016/08/rnns-in-tensorflow-a-practical-guide-and-undocumented-features/

Denny Britz在其中对静态/动态问题有以下评论:

静态

  

在内部,tf.nn.rnn为固定RNN长度创建展开图。这意味着,如果使用具有200个时间步长的输入调用tf.nn.rnn,则将创建具有200个RNN步骤的静态图形。首先,图形创建很慢。其次,您无法传递比原来指定的更长的顺序(> 200)。

动态

  

tf.nn.dynamic_rnn解决了这个问题。当执行图形时,它使用tf.While循环来动态构造图形。这意味着图形创建速度更快,并且可以喂入可变大小的批处理。

一般而言,他得出结论,使用tf.nn.static_rnn并没有真正的好处,而且在大多数情况下,您需要使用tf.nn.dynamic_rnn

对于我所拥有的价值,我自己也有同样的经历。