2015-12-10 20 views
25

Was der effizienteste Weg sein würde (elementweise) einen 2D-Tensor (Matrix) zu multiplizieren:Efficient elementweise Multiplikation einer Matrix und ein Vektor in TensorFlow

x11 x12 .. x1N 
... 
xM1 xM2 .. xMN 

durch einen vertikalen Vektor:

w1 
... 
wN 

eine neue Matrix zu erhalten:

x11*w1 x12*w2 ... x1N*wN 
... 
xM1*w1 xM2*w2 ... xMN*wN 

etwas Kontext zu geben, haben wir M dat Eine Probe in einer Charge, die parallel verarbeitet werden kann, und jede N -Elementprobe muss mit Gewichten w multipliziert werden, die in einer Variablen gespeichert sind, um schließlich die größte Xij*wj für jede Zeile i auszuwählen.

Antwort

30

Die einfachste Code, dies zu tun stützt sich auf das Sendeverhalten von tf.multiply()*, die auf numpy's broadcasting behavior basiert:

x = tf.constant(5.0, shape=[5, 6]) 
w = tf.constant([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) 
xw = tf.multiply(x, w) 
max_in_rows = tf.reduce_max(xw, 1) 

sess = tf.Session() 
print sess.run(xw) 
# ==> [[0.0, 5.0, 10.0, 15.0, 20.0, 25.0], 
#  [0.0, 5.0, 10.0, 15.0, 20.0, 25.0], 
#  [0.0, 5.0, 10.0, 15.0, 20.0, 25.0], 
#  [0.0, 5.0, 10.0, 15.0, 20.0, 25.0], 
#  [0.0, 5.0, 10.0, 15.0, 20.0, 25.0]] 

print sess.run(max_in_rows) 
# ==> [25.0, 25.0, 25.0, 25.0, 25.0] 

* In älteren Versionen von TensorFlow, tf.multiply()tf.mul() genannt wurde. Sie können auch den Operator * (d. H. xw = x * w) verwenden, um dieselbe Operation durchzuführen.

+5

Der Link für die Dokumentation ist tot. Das ist das eigentliche: [tf.multiply] (https://www.tensorflow.org/api_docs/python/tf/multiply) – Pantoofle

+0

Danke ... der Link sollte jetzt behoben sein! – mrry