neural - tensorflow seq2seq
¿Cuál es la diferencia entre tensorflow dynamic_rnn y rnn? (2)
Hay varias clases en tf.nn
que se relacionan con RNN. En los ejemplos que encuentro en la red, tf.nn.dynamic_rnn
y tf.nn.rnn
parecen usarse indistintamente o al menos no puedo entender por qué se usa uno en lugar del otro. ¿Cuál es la diferencia?
De RNNs en Tensorflow, una guía práctica y características indocumentadas por Denny Britz, publicado el 21 de agosto de 2016.
tf.nn.rnn
crea un gráfico desenrollado para una longitud de RNN fija. Esto significa que si llama atf.nn.rnn
con entradas que tienen 200 pasos de tiempo, está creando un gráfico estático con 200 pasos de RNN. Primero, la creación del gráfico es lenta. En segundo lugar, no puedes pasar secuencias más largas (> 200) de las que has especificado originalmente.
tf.nn.dynamic_rnn
resuelve esto. Utiliza un ciclotf.While
para construir dinámicamente el gráfico cuando se ejecuta. Eso significa que la creación de gráficos es más rápida y puede alimentar lotes de tamaño variable.
Son casi lo mismo, pero hay una pequeña diferencia en la estructura de entrada y salida. De la documentación:
tf.nn.dynamic_rnn
Esta función es funcionalmente idéntica a la función
rnn
anterior, pero> realiza el desenrollamiento completamente dinámico de las entradas.A diferencia de
rnn
, las entradas de entrada no son una lista de Tensors de Python, una para cada cuadro. En cambio, las entradas pueden ser un único Tensor donde el tiempo máximo es la primera o la segunda dimensión (ver el parámetrotime_major
). Alternativamente, puede ser una tupla (posiblemente anidada) de Tensors, cada una de ellas tiene dimensiones coincidentes de lote y tiempo. El resultado correspondiente es un único Tensor que tiene el mismo número de pasos de tiempo y tamaño de lote, o una tupla (posiblemente anidada) de dichos tensores, que coincide con la estructura anidada decell.output_size
.
Para más detalles, explore la fuente .