在tensorflow中,tf.nn.static_rnn和tf.nn.dynamic_rnn有什么区别,以及何时使用它们?
这两种方法都采用了一个sequence_length参数,使计算适应于输入的实际长度;这并不是说static_rnn仅限于固定大小的输入,对吗?
dynamic_rnn有以下额外的参数:
parallel_iterationsswap_memorytime_major但我认为这些只是微小的差别。
那么,tf.nn.static_rnn和tf.nn.dynamic_rnn的主要区别是什么?我们什么时候应该使用一种而另一种呢?
发布于 2018-07-19 15:04:28
这仍然是一个有用的资源(尽管是几年前编写的):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
不管有什么价值,我自己也有过同样的经历。
https://stackoverflow.com/questions/51425803
复制相似问题