Comment utiliser tf.while_loop() dans tensorflow
C'est une question générique. J'ai trouvé que les tensorflow, après nous construisons le graphe, il récupère les données dans le graphique, la sortie de graphe est un tenseur. mais dans de nombreux cas, nous avons besoin de faire de calcul, basé sur cette sortie (qui est un tensor
), ce qui n'est pas autorisé dans tensorflow.
par exemple, je suis en train de mettre en œuvre une RNN, qui boucle les heures sont basées sur les données de l'autonomie de la propriété. C'est, j'ai besoin d'utiliser un tensor
de juger si je devrais arrêter (je ne suis pas à l'aide de dynamic_rnn depuis dans ma conception, la rnn est très personnalisé). Je trouve tf.while_loop(cond,body.....)
pourrait être un candidat pour mon application. Mais le tutoriel officiel est trop simple. Je ne sais pas comment ajouter plus de fonctionnalités dans le "corps". Quelqu'un peut-il me donner quelques exemple plus complexe?
Aussi, dans de tels cas que si l'avenir de calcul est basé sur le tenseur de sortie (ex: la RNN arrêt basé sur le critère de sortie), ce qui est très courante. Est-il un moyen élégant ou meilleure manière plutôt que d'une dynamique graphique?
Vous devez vous connecter pour publier un commentaire.
Qu'est-ce que vous empêche d'ajouter plus de fonctionnalités pour le corps? Vous pouvez construire tout ce complexe de calcul graphique que vous aimez dans le corps et de prendre toutes les entrées que vous aimez à partir de l'affichage graphique. Aussi, en dehors de la boucle, vous pouvez faire ce que vous voulez avec ce que les sorties de votre retour. Comme vous pouvez le voir à partir de la quantité de "whatevers', TensorFlow du flux de contrôle primitives ont été construits avec beaucoup de généralité dans l'esprit. Ci-dessous est un autre "simple" exemple, dans le cas où il aide.
condition
j'ai besoin est calculé après l'exécution de labody
une fois. Donc c'est comme si j'avais besoin d'utiliser la valeur de retour du corps en tant que paramètre pourcondition
.while(condition(tensors)) { tensors = body(tensors); }
, de sorte que les tenseurs vous pass sont mis à jour pour les tenseurs retourné par le corps à chaque fois, et puis ceux mis à jour tenseurs sont passés àcondition
. La seule foiscondition
est appelé avantbody
est le très première fois, avant que le corps de la pseudo-code de la boucle ci-dessus est entré. Toutefois, dans ce cas, c'est juste à propos de l'initialisation de la tenseurs vous passez dansloop_vars
correctement. Par exemple, vous pouvez transmettre le résultat debody
comme leloop_vars
tenseurs dewhile_loop
.loop_vars
je me réfère à la définition de la fonction dewhile_loop
, qui estwhile_loop(condition, body, loop_vars)
(ses tenseurs qui sont passés àcondition
etbody
)