36 votes

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 à 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 trouver de l' 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 ce 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?

57voto

Peter Goldsborough Points 1046

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 permet de.

import tensorflow as tf
import numpy as np

def body(x):
    a = tf.random_uniform(shape=[2, 2], dtype=tf.int32, maxval=100)
    b = tf.constant(np.array([[1, 2], [3, 4]]), dtype=tf.int32)
    c = a + b
    return tf.nn.relu(x + c)

def condition(x):
    return tf.reduce_sum(x) < 100

x = tf.Variable(tf.constant(0, shape=[2, 2]))

with tf.Session():
    tf.initialize_all_variables().run()
    result = tf.while_loop(condition, body, [x])
    print(result.eval())

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