Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Efficient element-wise multiplication of a matrix and a vector in TensorFlow

What would be the most efficient way to multiply (element-wise) a 2D tensor (matrix):

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

by a vertical vector:

w1 ... wN 

to obtain a new matrix:

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

To give some context, we have M data samples in a batch that can be processed in parallel, and each N-element sample must be multiplied by weights w stored in a variable to eventually pick the largest Xij*wj for each row i.

like image 311
Andrzej Pronobis Avatar asked Dec 10 '15 01:12

Andrzej Pronobis


People also ask

Which operator is used to perform matrix multiplication in Tensorflow?

The 'matmul' function in Tensorflow is used to multiply the values in the matrix.

Which method do we use to multiply two variables with Tensorflow?

The 'multiply' function in Tensorflow is used to multiply the values element−wise in the matrix. The resultant product is displayed on the console.


1 Answers

The simplest code to do this relies on the broadcasting behavior of tf.multiply()*, which is based on numpy's broadcasting behavior:

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 older versions of TensorFlow, tf.multiply() was called tf.mul(). You can also use the * operator (i.e. xw = x * w) to perform the same operation.

like image 133
mrry Avatar answered Oct 03 '22 06:10

mrry