В tf.nn
имеется несколько классов, относящихся к RNN. В примерах, которые я нахожу в сети, tf.nn.dynamic_rnn
и tf.nn.rnn
кажутся взаимозаменяемыми или, по крайней мере, я не могу понять, почему один используется вместо другого. В чем разница?
В чем разница между tensorflow dynamic_rnn и rnn?
Ответ 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
.
Подробнее см. источник.