2016-11-14 6 views
0

Ich habe eine Matrix:Indexing pro Zeile in TensorFlow

Params = 

[[ 0 1 2 3] 

[ 4 5 6 7] 

[ 8 9 10 11]] 

Für jede Zeile ich einige Elemente unter Verwendung von Spaltenindizes auswählen möchten:

col_indices = 

[[0 1] 

[1 2] 

[2 3]] 

In Numpy, ich Zeilenindizes erstellen:

row_indices = 

[[0 0] 

[1 1] 

[2 2]] 

und tun params[row_indices, col_indices]

In TenforFlow, tat ich dies:

tf_params = tf.constant(params) 

tf_col_indices = tf.constant(col_indices, dtype=tf.int32) 

tf_row_indices = tf.constant(row_indices, dtype=tf.int32) 

tf_params[row_indices, col_indices] 

Aber es einen Fehler ausgelöst:

ValueError: Shape must be rank 1 but is rank 3 

Was bedeutet das? Wie sollte ich diese Art der Indizierung richtig machen?

Danke!

Antwort

0

Tensor-Rang (manchmal als Ordnung oder Grad oder N-Dimension bezeichnet) ist die Anzahl der Dimensionen des Tensors. Zum Beispiel wird folgender Tensor (als Python-Liste definiert) einen Rang von 2:

t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

Ein Rang zwei Tensor ist das, was wir denken, der typischerweise als eine Matrix, einen Rang ein Tensor ist ein Vektor. Für einen Rang zwei Tensor können Sie auf jedes Element mit der Syntax t [i, j] zugreifen. Für einen Tensor mit Rang drei müssten Sie ein Element mit t [i, j, k] adressieren. Weitere Informationen finden Sie unter this.

ValueError: Shape must be rank 1 but is rank 3 bedeutet, dass Sie versuchen, einen 3-Tensor (Zahlenwürfel) anstelle eines Vektors zu erstellen.

Um zu sehen, wie Sie Tensorkonstanten unterschiedlicher Form deklarieren können, sehen Sie this.

+0

Vielen Dank für Ihre Antwort! Aber ich verstehe nicht, woher "Rang 1" und "Rang 3" kommen. Beide Indizes Matrix verwende ich habe 2 Ränge. Und das Ergebnis, das ich erwarte, sollte auch 2 Ränge haben, genauso wie numpy Code. Irgendwelche Ideen? Vielen Dank! – xyd

+0

warum die Zeilen- und Spaltenindizesmatrizen den Rang 2 haben? Was repräsentieren sie? Ich schätze, du versuchst etwas falsch zu machen! Geben Sie Ihren vollständigen Code an, damit wir ihn nach Möglichkeit ausführen und testen können. –

+0

Bitte beachten Sie meinen obigen Code, ich möchte die genaue Indizierung als numpy in Tensorflow erreichen. Danke – xyd