2017-10-12 4 views
0

Ich habe eine Tensorflow-Variable, die mit tf.split aufgeteilt wird.Tensorflow: auf den Platzhalter nach tf.split() kann nicht über eine andere Platzhalter-Indexvariable zugegriffen werden?

Theta = tf.Variable(tf.random_normal((R,s), dtype=tf.float64))
Theta_s = tf.split(Theta, ysplit, 1)

ysplit ist eine Liste, um die Länge der geteilten entlang der Achse enthält 1. Nun Theta_s[i] eine Matrix der Dimension (x Rysplit[i]). Ich muss auf Theta_s über eine andere Platzhalterindexvariable zugreifen. Zur Zeit bin ich nicht in der Lage es seit tf.split() gibt die Liste zu tun, und ich bekomme diese Fehlermeldung:

TypeError: list indices must be integers or slices, not Tensor

Gibt es einen geeigneten Weg, um die Variable zu deklarieren, um den Zweck zu erfüllen?

Antwort

0

können Sie ein tf.TensorArray verwenden, um mit einem tf.Tensor dynamischer Indizierung auszuführen:

Theta_s = tf.split(Theta, ysplit, 1) 

array = tf.TensorArray(tf.float64, size=len(Theta_s), clear_after_read=False) 

for i, t in enumerate(Theta_s): 
    array = array.write(i, t) 

placeholder_index = tf.placeholder(tf.int32, shape=[]) 

Theta_s_i = array.read(placeholder_index) 
+0

Danke für die Antwort. Der Ysplit ist jedoch eine Liste mit unterschiedlichen Zahlen, d. H. Die Split-Größe ist ungleichmäßig. Es scheint, dass TensorArray erwartet, dass die Elemente die gleiche Form haben. ysplit = [5,2,3]. Der Fehler ist [ValueError: Inkonsistente Formen: saw (3, 2), aber erwartet (3, 5) (und infer_shape = True)]. – Arvin

+0

Sorry .. Meine schlechte, die Option zu verpassen. Danke für Ihre freundliche Hilfe. – Arvin

+0

Irgendein Vorschlag, eine Zeile von Theta_s_i zu aktualisieren: Theta_s_i [j], Theta_s_i als eine Matrix annehmend? Vielen Dank, – Arvin

Verwandte Themen