Xiv*_*Xiv 21 neural-network tensorflow
"动态展开RNN"是什么意思.我已经在Tensorflow源代码中看到了这一点,但我正在寻找一个概念性解释,一般扩展到RNN.
在张量流rnn
方法中,记录了:
如果
sequence_length
提供向量,则执行动态计算.这种计算方法不计算超过小批量最大序列长度的RNN步骤(从而节省计算时间),
但在dynamic_rnn
方法中它提到:
该参数
sequence_length
是可选的,用于在超过批处理元素的序列长度时复制状态和清零输出.所以它更像是正确而不是表现,不像是rnn()
.
那么这意味着rnn
可变长度序列的性能更高吗?dynamic_rnn
和之间的概念差异是rnn
什么?
从文档我明白他们所说的是,该参数sequence_length
在rnn
方法会影响,因为当集,它将执行动态计算,它会之前停止性能。
例如,如果rnn
最大输入序列的长度为50,如果其他序列较短,则最好sequence_length
为每个序列设置填充零直到达到 50 个时间步。但是,如果sequence_length
未提供,它将认为每个序列具有相同的长度,因此它将用于填充的零视为序列中的正常项。
这并不意味着dynamic_rnn
性能较低,文档说参数sequence_length
不会影响性能,因为计算已经是动态的。
同样根据这篇关于 Tensorflow 中 RNN 的帖子:
在内部,tf.nn.rnn 创建一个固定 RNN 长度的展开图。这意味着,如果您使用具有 200 个时间步长的输入调用 tf.nn.rnn,您将创建一个具有 200 个 RNN 步长的静态图。首先,图创建很慢。其次,您无法传递比最初指定的更长的序列 (> 200)。
tf.nn.dynamic_rnn 解决了这个问题。它使用 tf.While 循环在执行时动态构建图形。这意味着图形创建速度更快,您可以提供不同大小的批次。性能呢?您可能认为静态 rnn 比其动态对应物更快,因为它预先构建了图形。根据我的经验,情况并非如此。
简而言之,只需使用 tf.nn.dynamic_rnn。tf.nn.rnn 没有任何好处,如果将来不推荐使用它,我也不会感到惊讶。
dynamic_rnn
甚至更快(或相等),因此他建议dynamic_rnn
无论如何使用。
归档时间: |
|
查看次数: |
3756 次 |
最近记录: |