2016-11-21 5 views
0

Ich habe eine 1D Python-Liste namens x, von Form (1000), die Tensor-Elemente der Form (3, 600) enthält. Ich habe auch eine Tensorflussvariable w der Form (600, 1), die ich zu jedem Tensorelement von x multiplizieren möchte. Das Ergebnis jeder Operation wäre ein Tensor der Form (3, 1).Multiplikation von Tensoren in einer Python-Liste mit einer konstanten Variablen in Tensorflow

Gibt es eine Möglichkeit, w auf jedes Element von x effizient anzuwenden? Die Logik eine Python-Schleife wäre:

for i in range(1000): 
    x[i] = tf.matmul(x[i], w) 

Ich habe bereits versucht, die folgenden:

w = [w] * 1000 
result = tf.mul(x, w) 

Aber ich habe folgende Fehlermeldung:

ValueError: Dimensions must be equal, but are 3 and 600 for 'Mul' (op: 'Mul') with input shapes: [1000,3,600], [1000,600,1] 

Dank!

Antwort

0

Sehen Sie sich mit tf.map_fn an, die eine Funktion entlang der ersten Achse eines Tensors abbildet. In Ihrem Fall haben Sie x ist ein Tensor der Form (1000, 3, 600). Es spielt keine Rolle, dass das erste Dim eine Liste ist. Es wird nur als Tensor fungieren.

tf.map_fn(lambda x_: tf.matmul(x_, W), x)

Sie könnten auch die tf.batch_matmul Betrieb wie folgt verwenden.

tf.batch_matmul(x, [w] * 1000)

Allerdings würde ich tf.tile statt [w] * 1000

+0

Danke, beide arbeiteten nutzen! 'tf.batch_matmul' schien jedoch schneller zu sein. – Pierre

+0

Ja. Aus irgendeinem Grund denke ich nicht, dass es gesendet wird. Irgendwie nervig, dass man das erste Dim kacheln muss. – chasep255

Verwandte Themen