Multiplicación eficiente de elementos de una matriz y un vector en TensorFlow

¿Cuál sería la forma más eficiente de multiplicar (de forma elemental) un tensor 2D (matriz):

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

por un vector vertical:

 w1 ... wN 

Para obtener una nueva matriz:

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

Para dar algo de contexto, tenemos M muestras de datos en un lote que se pueden procesar en paralelo, y cada muestra de elemento N debe multiplicarse por pesos w almacenados en una variable para finalmente elegir el Xij*wj más grande para cada fila i .

El código más simple para hacer esto se basa en el comportamiento de transmisión de tf.multiply() * , que se basa en el comportamiento de transmisión de numpy :

 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] 

* En versiones anteriores de TensorFlow, tf.multiply() se llamaba tf.mul() . También puede utilizar el operador * (es decir, xw = x * w ) para realizar la misma operación.