Cómo usar tf.while_loop () en tensorflow

Esta es una pregunta genérica. Encontré que en el tensorflow, después de que construimos el gráfico, obtenemos los datos en el gráfico, la salida del gráfico es un tensor. pero en muchos casos, necesitamos realizar algunos cálculos basados ​​en esta salida (que es un tensor ), que no está permitido en tensorflow.

por ejemplo, estoy tratando de implementar un RNN, que realiza ciclos de tiempo basados ​​en la propiedad de los datos. Es decir, necesito usar un tensor para juzgar si debo detenerme (no estoy usando dynamic_rnn ya que en mi diseño, el rnn es altamente personalizado). Me parece que tf.while_loop(cond,body.....) podría ser un candidato para mi implementación. Pero el tutorial oficial es demasiado simple. No sé cómo agregar más funcionalidades al ‘cuerpo’. ¿Puede alguien darme algunos ejemplos más complejos?

Además, en tal caso, si el cálculo futuro se basa en la salida del tensor (por ejemplo, la parada de RNN en función del criterio de salida), es un caso muy común. ¿Hay una forma elegante o mejor en lugar de un gráfico dynamic?

¿Qué te impide agregar más funcionalidad al cuerpo? Puede crear cualquier gráfico computacional complejo que desee en el cuerpo y tomar las entradas que desee del gráfico adjunto. Además, fuera del bucle, puede hacer lo que quiera con las salidas que regrese. Como se puede ver en la cantidad de “malhechores”, las primitivas de flujo de control de TensorFlow se construyeron con mucha generalidad en mente. Abajo hay otro ejemplo ‘simple’, en caso de que ayude.

 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.global_variables_initializer().run() result = tf.while_loop(condition, body, [x]) print(result.eval())