/ / W jaki sposób TensorFlow wykonuje pętle symboliczne (np. Tf.while_loop, tf.scan itp.)? - tensorflow, koncepcyjny

W jaki sposób TensorFlow wykonuje pętle symboliczne (np. Tf.while_loop, tf.scan itp.)? - tensorflow, koncepcyjny

Czy wewnętrznie rozwija wykres, tj. czy tworzy on w locie statyczny wykres z kopiami podgrupy korpusu pętli, czy też zarządza aktywacjami do przodu tylko dla backprop w różnych lokalizacjach pamięci dla każdej iteracji pętli, bez wyraźnego rozszerzania wykresu.

Odpowiedzi:

0 dla odpowiedzi № 1

Takie pętle nie są jawnie rozwijane. Rozumiem przez to, że jeśli tf.while_loop musi działać 100 razy, na wykresie nie będzie 100 wywołań funkcji ciała. Na przykład załóżmy, że chcemy użyć tensorflow do obliczeń x^N (lub x**N w języku python). Jednym ze sposobów na zrobienie tego byłoby:

import tensorflow as tf

N = tf.constant(100)
i = tf.constant(0)
x = tf.constant(1.5)

def body(i, x, x0):
return i + 1, x * x0, x0

output = tf.while_loop( lambda i,x,x0: i < N-1, body, [i, x, x] );

with tf.Session() as sess:
writer = tf.summary.FileWriter("while_loop_example")
writer.add_graph(sess.graph)
print(sess.run(output))

Ciało tej pętli musi działać 99 razy. Jeśli jednak spojrzymy na wykres (za pomocą polecenia „tensorboard --logdir while_loop_example„), otrzymujemy to:

wprowadź opis obrazu tutaj

Wykres nie zmienia się, jeśli zmienię liczbę iteracji pętli.