2017-01-17 2 views
0

In Tensorflow, was ist der einfachste Weg, um rekursiv eine Reihe von Ops, wo jeder rekursive Schritt als Eingabe die Ausgabe des letzten Schritts nimmt? Das entscheidende Merkmal hierbei ist, dass die Anzahl der Rekursionsschritte bei der Auswertung angegeben wird und zwischen den Beispielen variieren kann.Runtime dynamische Rekursion Tiefe auf Variable Größe Tensoren

Zum Beispiel für die Eingabe Tensoren X, 5, und eine Funktion F, würde Ich mag

F(F(F(F(F(X)))))

Aber das gleiche Modell sein sollte auch in der Lage zu berechnen, berechnen X, 3 als:

F(F(F(X)))

Leider, während Schleifen wird nicht funktionieren, weil sie E nforce strict shape invariants, was bedeutet, dass alle Dimensionen von Tensor X zur Kompilierzeit bekannt sein müssen, aber ich werde die Beispielgröße (erste Dimension von X) erst zur Laufzeit kennen.

Danke für Ihre Hilfe!

Antwort

2

Was Sie wollen, ist in TensorFlow mit While-Schleifen, nämlich der tf.while_loop Konstrukt einfach zu erreichen. tf.while_loop hat einen shape_invariants Parameter, mit dem Sie eine (möglicherweise teilweise) Form für jede Schleifenvariable angeben können. Diese Form muss nur weniger spezifisch sein als die Form, die die Schleifenvariable während der Schleife annehmen kann. Hier ist ein vollständiges Beispiel, in dem F einen Wert an einen Tensor anhängt.

import tensorflow as tf 
sess = tf.InteractiveSession() 

i = tf.constant(0, dtype=tf.int32) 
x = tf.constant(0, shape=[0], dtype=tf.int32) 

i, x = tf.while_loop(lambda i, _: i < 10, 
        lambda i, x: (i + 1, tf.concat_v2([x, tf.expand_dims(i, 0)], 0)), 
        [i, x], 
        shape_variants=[i.get_shape(), tf.TensorShape([None])]) 

print(x.eval()) 

[0 1 2 3 4 5 6 7 8 9] 
+0

Vielen Dank! Klar, ich habe die Dokumentation nicht genau genug gelesen. – mkmatlock

Verwandte Themen