2016-09-27 3 views
18

Существует несколько классов в tf.nn, которые относятся к RNN. В примерах, которые я нахожу в сети, tf.nn.dynamic_rnn и tf.nn.rnn, кажется, используются взаимозаменяемо или, по крайней мере, я не могу понять, почему один используется вместо другого. В чем разница?В чем разница между tensorflow dynamic_rnn и rnn?

+0

См. Также это сообщение SO https://stackoverflow.com/q/42497216/3924118, где автор спрашивает об эквивалентной функции 'tf.nn.rnn' для более поздних версий TensorFlow, что, по-видимому, be 'tf.nn.static_rnn'. – nbro

ответ

24

От RNNs in Tensorflow, a Practical Guide and Undocumented Features по Denny Britz, опубликованной в 21 августа, 2016.

tf.nn.rnn создает развернутую диаграмму для фиксированной длины РНН. То, что означает, что вы вызываете tf.nn.rnn с входами, имеющими 200 временных шагов, вы являетесь , создавая статический график с 200 шагами RNN. Во-первых, создание графика slow. Во-вторых, вы не можете передать более длинные последовательности (> 200), чем , которые вы изначально указали.

tf.nn.dynamic_rnn решает это. Он использует цикл tf.While для динамического вычисления при построении графика. Это означает, что создание графика - быстрее, и вы можете комбинировать партии переменного размера.

+2

Зачем использовать статический RNN, если динамический RNN предоставляет все преимущества практически без каких-либо недостатков? –

2

Они почти одинаковы, но есть небольшая разница в структуре ввода и вывода. Из документации:

tf.nn.dynamic_rnn

Эта функция функционально идентична функции rnn выше, но> выполняет полностью динамический разворачивания входов.

В отличие от rnn, входные входы не являются списком тензоров Python, один для каждого кадра. Вместо этого входы могут быть одним тензором, где максимальное время является либо первым, либо вторым измерением (см. Параметр time_major). В качестве альтернативы он может быть (возможно, вложенным) кортежем Тензоры, каждый из которых имеет соответствующие размеры партии и времени. Соответствующий выход представляет собой либо один Тензор, имеющий такое же число временных шагов и размера партии, либо (возможно, вложенный) набор таких тензоров , соответствующих вложенной структуре cell.output_size.

Для получения дополнительной информации исследуйте source.

Смежные вопросы