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


Cuál sería la forma más eficiente de multiplicar (en cuanto a elementos) 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 algún contexto, tenemos M muestras de datos en un lote que se puede procesar en paralelo, y cada muestra de N-elemento debe multiplicarse por pesos w almacenados en una variable para finalmente elegir el mayor Xij*wj para cada fila i.

Author: kmario23, 2015-12-10

1 answers

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 usar el operador * (es decir, xw = x * w) para realizar la misma operación.

 36
Author: mrry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-08 13:08:23