Подтвердить что ты не робот

В чем разница между tensorflow dynamic_rnn и rnn?

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

4b9b3361

Ответ 1

Из RNN в Tensorflow, Практическое руководство и недокументированные функции от Denny Britz, опубликованного 21 августа 2016 года.

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

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

Ответ 2

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

tf.nn.dynamic_rnn

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

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

Подробнее см. источник.