32 votes

Quelle est la différence entre tensorflow dynamic_rnn et rnn ?

Il existe plusieurs classes dans tf.nn qui concernent les RNN. Dans les exemples que je trouve sur le web, tf.nn.dynamic_rnn y tf.nn.rnn semblent être utilisés de manière interchangeable ou, du moins, je ne parviens pas à comprendre pourquoi l'un est utilisé à la place de l'autre. Quelle est la différence ?

1 votes

Voir aussi ce billet de SO stackoverflow.com/q/42497216/3924118 dans lequel l'auteur s'interroge sur la fonction équivalente de tf.nn.rnn pour les versions plus récentes de TensorFlow, ce qui semble être tf.nn.static_rnn .

49voto

Abhishek Mishra Points 1239

De Les RNNs dans Tensorflow, un guide pratique et des fonctionnalités non documentées par Denny Britz, publié le 21 août 2016.

tf.nn.rnn crée un graphe non déroulé pour une longueur de RNN fixe. Cela signifie que si vous appelez tf.nn.rnn avec des entrées ayant 200 pas de temps, vous êtes créer un graphe statique avec 200 étapes RNN. Premièrement, la création du graphe est lente. Deuxièmement, vous êtes incapable de passer des séquences plus longues (> 200) que que vous avez spécifié à l'origine.

tf.nn.dynamic_rnn résout ce problème. Il utilise un tf.While l construire dynamiquement le graphe lors de son exécution. Cela signifie que la création du graphe est plus rapide et vous pouvez alimenter des lots de taille variable.

14 votes

Pourquoi utiliserait-on encore le RNN statique si le RNN dynamique offre tous les avantages sans pratiquement aucun inconvénient ?

0 votes

Vouliez-vous dire "alimenter une longueur de séquence différente" ? Pour autant que je sache, on peut facilement alimenter différents lots dans n'importe quel graphique, il suffit de déclarer les espaces réservés appropriés.

2voto

Dmitriy Danevskiy Points 1909

Ils sont presque identiques, mais il y a une petite différence dans la structure des entrées et des sorties. De la documentation :

tf.nn.dynamic_rnn

Cette fonction est fonctionnellement identique à la fonction rnn ci-dessus, mais >réalise un déroulage entièrement dynamique des entrées.

Contrairement à rnn l'entrée n'est pas une liste Python de tenseurs, un pour chaque image. chaque image. Au lieu de cela, les entrées peuvent être un seul tenseur où le temps maximum est soit le premier ou le deuxième time_major ). Sinon, il peut s'agir d'un tuple (éventuellement imbriqué) de Tenseurs, chacun d'entre eux ayant des dimensions de lot et de temps correspondantes. La sortie correspondante de sortie correspondante est soit un Tenseur unique ayant le même nombre de nombre d'étapes temporelles et la même taille de lot, soit un tuple (éventuellement imbriqué) de tels tenseurs, correspondant à la dimension imbriquée. correspondant à la structure imbriquée de cell.output_size .

Pour plus de détails, consultez source .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X